在Java中如何排序Map

Map是键值对的集合。
所以从逻辑上讲,我们可以通过两种方式对Map进行排序:按键排序或者按值排序。

on  It Road.com

Java 按值对Map进行排序

在 Java 8 中,Map.Entry类具有 static方法 compareByValue() 来帮助我们按值对 Map进行排序。

comparingByValue()方法返回一个 Comparator,该 Comparator 以自然顺序对值进行比较。

HashMap<Integer, String> unSortedMap = new HashMap<>();

unSortedMap.put(50, "Alex");
unSortedMap.put(20, "Charles");
unSortedMap.put(60, "Brian");
unSortedMap.put(70, "Edwin");
unSortedMap.put(120, "George");
unSortedMap.put(10, "David");
// LinkedHashMap保留插入元素的顺序
LinkedHashMap<Integer, String> sortedMap = new LinkedHashMap<>();
unSortedMap.entrySet()
    .stream()
    .sorted(Map.Entry.comparingByValue())
    .forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));
System.out.println(sortedMap);

程序输出。

{50=Alex, 60=Brian, 20=Charles, 10=David, 70=Edwin, 120=George}

Java 按Key 对Map进行排序

按键对Map进行排序的最佳和最有效的方法是将所有Map条目添加到 TreeMap 对象中。
TreeMap总是按排序顺序存储键。

HashMap<Integer, String> map = new HashMap<>();

map.put(50, "Alex");
map.put(20, "Charles");
map.put(60, "Brian");
map.put(70, "Edwin");
map.put(120, "George");
map.put(10, "David");
TreeMap<Integer, String> treeMap = new TreeMap<>(map);
System.out.println(treeMap);

程序输出:

{10=David, 20=Charles, 50=Alex, 60=Brian, 70=Edwin, 120=George}
日期:2020-09-17 00:09:36 来源:oir作者:oir