为了账号安全,请及时绑定邮箱和手机立即绑定

java map排序

java map排序

回首忆惘然 2019-04-13 08:46:25
需求是这样的:现在有一个list,里面n个map,每个map都有m大小的key-value,且每个map的key的顺序都是一样的,比如说map1的第x个key是y,那么mapn的第x个key也是y。现在要对list中的每个map进行排序,要按n个map中的相同的key的value值的和的顺序排序。举例:比如3个map,都有key1,key2,如果map1.get(key2)+map2.get(key2)+map3.get(key2)>map1.get(key1)+map2.get(key1)+map3.get(key1),那么就要将这三个map中的key的顺序按照key2,key1的顺序排列,原先每个map中key的顺序是key1,key2。怎么来实现呢
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

1.先算出所有key的和的排序
2.对原来的list进行遍历,根据key对应的顺序,之后放到一个list中
ListsortedKeys=...;//第一步算的结果
List>originList=...;//原始数据集合
List>resultList=newArrayList>();
for(MaporiginMap:originList){
MapsortedMap=newLinkedHashMap();
for(StringsortedKey:sortedKeys){
sortedMap.put(sortedKey,originMap.get(sortedKey));
}
resultList.put(sortedMap);
}
                            
查看完整回答
反对 回复 2019-04-13
?
MYYA

TA贡献1868条经验 获得超4个赞

有序Map可以用TreeMap来实现,所以我在示例中用的java.util.TreeMap。
一般SortedMap都可以用一个Comparator作为构建参数,那么你可以自己写一个Comparator来实现排序,下面就是例子
importjava.util.*;
publicclassTest{
privateSortedMapfirst;
privateSortedMapsecond;
privateSortedMapthird;
privateSortedMapmain;
publicTest(){
first=newTreeMap();
second=newTreeMap();
third=newTreeMap();
main=newTreeMap(newComparator(){
publicintcompare(Stringk1,Stringk2){
Integerv1=first.get(k1)+second.get(k1)+third.get(k1);
Integerv2=first.get(k2)+second.get(k2)+third.get(k2);
returnv2-v1;
}
});
}
publicvoidput(Stringkey,Stringvalue,Integerv1,Integerv2,Integerv3){
first.put(key,v1);
second.put(key,v2);
third.put(key,v3);
main.put(key,value);
}
publicSortedMapgetMain(){
returnmain;
}
publicstaticvoidmain(String[]args){
Testtest=newTest();
test.put("a","aaaaaaaa",1,2,3);
test.put("b","bbbbbbbb",10,20,30);
test.put("c","cccccccc",5,15,20);
test.put("d","dddddddd",100,1,3);
for(Map.Entryentry:test.getMain().entrySet()){
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 337 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信