使用 Java 8 Stream API 以升序和降序(反向)顺序按值对 Map 进行排序 的简单快速使用示例。
逻辑的中心是方法 Map.Entry.comparingByValue()
,它按值的自然顺序比较 Map.Entry
。
在 java 8 中,Map.Entry
类有静态方法 comparingByValue()
来帮助您按值排序。此方法返回一个 Comparator
,它按值的自然顺序比较 Map.Entry
。
或者,您可以传递自定义 Comparator
以用于排序。这可用于以相反的顺序对Map进行排序。
Map<String, Integer> unSortedMap = getUnSortedMap(); System.out.println("Unsorted Map : " + unSortedMap); //LinkedHashMap preserve the ordering of elements in which they are inserted LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap<>(); unSortedMap.entrySet() .stream() .sorted(Map.Entry.comparingByValue()) .forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue())); System.out.println("Sorted Map : " + sortedMap); Output: Unsorted Map : {alex=1, charles=4, david=2, brian=5, elle=3} Sorted Map : {alex=1, david=2, elle=3, charles=4, brian=5}
Map<String, Integer> unSortedMap = getUnSortedMap(); System.out.println("Unsorted Map : " + unSortedMap); //LinkedHashMap preserve the ordering of elements in which they are inserted LinkedHashMap<String, Integer> reverseSortedMap = new LinkedHashMap<>(); //Use Comparator.reverseOrder() for reverse ordering unSortedMap.entrySet() .stream() .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) .forEachOrdered(x -> reverseSortedMap.put(x.getKey(), x.getValue())); System.out.println("Reverse Sorted Map : " + reverseSortedMap); Output: Unsorted Map : {alex=1, charles=4, david=2, brian=5, elle=3} Reverse Sorted Map : {brian=5, charles=4, elle=3, david=2, alex=1}
本例中使用的完整代码,供大家参考。
package com.cundage.spring; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; public class MapSortingExamples { public static void main(String[] args) { System.out.println("\nSorting using Java8 streams\n"); sortByValueJava8Stream(); } private static void sortByValueJava8Stream() { Map<String, Integer> unSortedMap = getUnSortedMap(); System.out.println("Unsorted Map : " + unSortedMap); LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap<>(); unSortedMap.entrySet().stream().sorted(Map.Entry.comparingByValue()) .forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue())); System.out.println("Sorted Map : " + sortedMap); LinkedHashMap<String, Integer> reverseSortedMap = new LinkedHashMap<>(); unSortedMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) .forEachOrdered(x -> reverseSortedMap.put(x.getKey(), x.getValue())); System.out.println("Reverse Sorted Map : " + reverseSortedMap); } private static Map<String, Integer> getUnSortedMap() { Map<String, Integer> unsortMap = new HashMap<>(); unsortMap.put("alex", 1); unsortMap.put("david", 2); unsortMap.put("elle", 3); unsortMap.put("charles", 4); unsortMap.put("brian", 5); return unsortMap; } } Output: Sorting using Java8 streams Unsorted Map : {alex=1, charles=4, david=2, brian=5, elle=3} Sorted Map : {alex=1, david=2, elle=3, charles=4, brian=5} Reverse Sorted Map : {brian=5, charles=4, elle=3, david=2, alex=1}
在评论部分把你的问题告诉我。
快乐学习!!
标签2: Java Sorting地址:https://www.cundage.com/article/java-sort-map-by-values.html