需求是这样的:现在有一个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
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());}}}
添加回答
举报
0/150
提交
取消