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         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM