猿问

java map排序

需求是这样的:
现在有一个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。
怎么来实现呢
回首忆惘然
浏览 338回答 2
2回答

饮歌长啸

1.先算出所有key的和的排序2.对原来的list进行遍历,根据key对应的顺序,之后放到一个list中ListsortedKeys=...;//第一步算的结果ListoriginList=...;//原始数据集合ListresultList=newArrayList();for(MaporiginMap:originList){MapsortedMap=newLinkedHashMap();for(StringsortedKey:sortedKeys){sortedMap.put(sortedKey,originMap.get(sortedKey));}resultList.put(sortedMap);}

MYYA

有序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());}}}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答