加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Java中map按值排序

(2018-04-22 23:12:31)
标签:

java

map

排序

分类: 原创

 

 

本文提供一个排序工具类,用于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=21sku1=2}, map2={sku1=2}, map1={sku2=1sku1=2sku3=3}}  

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


从控制台打印出的输出信息可以看出,map根据vule自定义的规则进行了排序。

这个工具类使用起来很方便,大家只需要根据排序规则自定义实现Compartor排序类即可。



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有