在java的众多Map实现中,Map基本上是不能保证顺序的(LinkedHashMap可以保证插入顺序或者访问顺序,TreeMap默认按照key升序但可以自定义Comparator),在开发过程中当数据量不是很大的时候,使用HashMap去统计数据非常方便,但是为了使得输出结果更美观一些,我们需要按某种自定义顺序输出。
下面介绍一种排序Map的方法,使用起来很方便,如下面代码:
1 private static class ValueComparator implements Comparator
2
3 @Override
4 public int compare(Map.Entry
5 return o1.getValue() - o2.getValue();
6 }
7 }
8
9 public static void test3() {
10 Map
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
22 mapList.addAll(map.entrySet());
23 for (Map.Entry
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
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
2 @Override
3 public int compare(Map.Entry
4 return o1.getKey().compareToIgnoreCase(o2.getKey());
5 }
6 };
7
8 Collections.sort(mapList, comparator);
9 for (Map.Entry
10 System.out.println(entry.getKey() + " : " + entry.getValue());
11 }
使用Java 8之后还可以使用lambda表达式简化一下代码
1 Comparator
2
3 Collections.sort(mapList, comparator);
4 for (Map.Entry
5 System.out.println(entry.getKey() + " : " + entry.getValue());
6 }