Java.util.Map排序输出详解编程语言

在java的众多Map实现中,Map基本上是不能保证顺序的(LinkedHashMap可以保证插入顺序或者访问顺序,TreeMap默认按照key升序但可以自定义Comparator),在开发过程中当数据量不是很大的时候,使用HashMap去统计数据非常方便,但是为了使得输出结果更美观一些,我们需要按某种自定义顺序输出。

下面介绍一种排序Map的方法,使用起来很方便,如下面代码:

 1     private static class ValueComparator implements Comparator<Map.Entry<String, Integer>> { 
 2  
 3         @Override 
 4         public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { 
 5             return o1.getValue() - o2.getValue(); 
 6         } 
 7     } 
 8  
 9     public static void test3() { 
10         Map<String, Integer> map = new HashMap<>(); 
11         map.put("a", 9); 
12         map.put("b", 8); 
13         map.put("c", 7); 
14         map.put("d", 6); 
15         map.put("e", 5); 
16         map.put("f", 4); 
17         map.put("g", 3); 
18         map.put("h", 2); 
19         map.put("i", 1); 
20  
21         List<Map.Entry<String, Integer>> mapList = new ArrayList<>(); 
22         mapList.addAll(map.entrySet()); 
23         for (Map.Entry<String, Integer> entry : mapList) { 
24             System.out.println(entry.getKey() + " : " + entry.getValue()); 
25         } 
26         System.out.println("/n"); 
27  
28         ValueComparator valueComparator = new ValueComparator(); 
29         Collections.sort(mapList, valueComparator); 
30         for (Map.Entry<String, Integer> entry : mapList) { 
31             System.out.println(entry.getKey() + " : " + entry.getValue()); 
32         } 
33         System.out.println("/n"); 
34     }

在上面代码中我们先定义一个Comparator,然后将Map转换为List,通过Collections.sort(mapList, valueComparator)方法进行排序输出。

这种写法还可以简化一下,Comparator使用的时候才定义。

 1         Comparator<Map.Entry<String, Integer>> comparator = new Comparator<Map.Entry<String, Integer>>() { 
 2             @Override 
 3             public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { 
 4                 return o1.getKey().compareToIgnoreCase(o2.getKey()); 
 5             } 
 6         }; 
 7  
 8         Collections.sort(mapList, comparator); 
 9         for (Map.Entry<String, Integer> entry : mapList) { 
10             System.out.println(entry.getKey() + " : " + entry.getValue()); 
11         }

使用Java 8之后还可以使用lambda表达式简化一下代码

1         Comparator<Map.Entry<String, Integer>> comparator = (o1, o2) -> o1.getKey().compareToIgnoreCase(o2.getKey()); 
2  
3         Collections.sort(mapList, comparator); 
4         for (Map.Entry<String, Integer> entry : mapList) { 
5             System.out.println(entry.getKey() + " : " + entry.getValue()); 
6         }

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/11348.html

(0)
上一篇 2021年7月19日 11:02
下一篇 2021年7月19日 11:02

相关推荐

发表回复

登录后才能评论