新浪博客

Java中map按值排序

2018-04-22 23:12阅读:


本文提供一个排序工具类,用于Java中的map如何按照value进行排序。工具类基于泛型参数,更具有通用性。
下面用这个工具类实现一个简单的需求:根据mapvluesize进行生序排练。mapvlue也是一个map类型的对象。

1.map排序工具类


1. import java.util.*;
2.
3.
6. public class MapSortUtil {

7.
8.
17. public static Map sortMapByValue(Map oriMap, Comparator comparator) {
18. if (oriMap == null || oriMap.isEmpty()) {
19. return oriMap;
20. }
21. Map sortedMap = new LinkedHashMap<>();
22. List> entryList = new ArrayList<>(oriMap.entrySet());
23. Collections.sort(entryList, comparator);
24.
25. Iterator> iterator = entryList.iterator();
26. Map.Entry tmpEntry;
27. while (iterator.hasNext()) {
28. tmpEntry = iterator.next();
29. sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
30. }
31. return sortedMap;
32. }
33. }
2.实现comparator构造器
1. import java.math.BigDecimal;
2. import java.util.Comparator;
3. import java.util.Map;
4.
5.
8. public class TestComparator implements Comparator>> {
9.
10. @Override
11. public int compare(Map.Entry> o1, Map.Entry> o2) {
12. return o1.getValue().size() - o2.getValue().size();
13. }
14. }
3. 测试方法
1. public static void main(String[] args) {
2. Map> skuOriMap = Maps.newHashMap();
3. Map skuMap1 = Maps.newHashMap();
4. skuMap1.put('sku1', new BigDecimal(2));
5. skuMap1.put('sku2', new BigDecimal(1));
6. skuMap1.put('sku3', new BigDecimal(3));
7. skuOriMap.put('map1', skuMap1);
8.
9. Map skuMap2 = Maps.newHashMap();
10. skuMap2.put('sku1', new BigDecimal(2));
11. skuOriMap.put('map2', skuMap2);
12.
13. Map skuMap3 = Maps.newHashMap();
14. skuMap3.put('sku1', new BigDecimal(2));
15. skuMap3.put('sku2', new BigDecimal(21));
16. skuOriMap.put('map3', skuMap3);
17.
18. System.out.println('======排序前=======' + skuOriMap);
19.
20. Map> skuSortMap = MapSortUtil.sortMapByValue(skuOriMap, new TestComparator());
21. System.out.println('======排序后=====' + skuSortMap);
}


4. 测试结果

1. ======排序前======={map3={sku2=21, sku1=2}, map2={sku1=2}, map1={sku2=1, sku1=2, sku3=3}}
2. ======排序后====={map2={sku1=2}, map3={sku2=21, sku1=2}, map1={sku2=1, sku1=2, sku3=3}}


从控制台打印出的输出信息可以看出,map根据vule自定义的规则进行了排序。
这个工具类使用起来很方便,大家只需要根据排序规则自定义实现Compartor排序类即可。

我的更多文章

下载客户端阅读体验更佳

APP专享