在Java中,如何根据key对Map进行排序

我们可以使用TreeMap实现。
默认情况下,TreeMap中的所有键值对都按其自然顺序排序。
我们需要在 TreeMap中添加所有未排序的键值对。
如果要倒序排序,还需要指定Collections.reverseOrder()方法:

Map<String, Integer> unSortedMap = getUnSortedMap();

System.out.println("Unsorted Map : " + unSortedMap);
Map<String, Integer> sortedMap = new TreeMap<String, Integer>(unSortedMap);
// Map<String, Integer> reverseSortedMap = new TreeMap<String, Integer>(Collections.reverseOrder());
// reverseSortedMap.putAll(unSortedMap);

System.out.println("Sorted Map   : " + sortedMap);

在 java 8 中,还可以使用 Stream API 根据键 对Map进行排序。

Map.Entry类具有静态方法 comparingByKey()来按键排序。
此方法返回一个 Comparator,它在key上按自然顺序比较 Map.Entry

或者,我们可以传递自定义的“比较器”进行特殊的排序。

Map<String, Integer> unSortedMap = getUnSortedMap();

System.out.println("Unsorted Map : " + unSortedMap);

// LinkedHashMap保留插入元素的顺序
LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap<>();
unSortedMap.entrySet()
	.stream()
	.sorted(Map.Entry.comparingByKey())
	// .sorted(Map.Entry.comparingByKey(Comparator.reverseOrder()))  倒序排序
	.forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));
	
	
System.out.println("Sorted Map   : " + sortedMap);
日期:2020-09-17 00:09:26 来源:oir作者:oir