Map
也可以在 Java 8 中使用 stream.sorted()
方法进行排序。我们可以根据其 Key 或 Value 对 Map
进行排序。
但是在调用 sorted()
方法之前,我们必须将 Map
转换为 Stream
,然后我们才能对其进行排序。
很简单,通过在 Map
对象上调用 entrySet()
方法,它会返回这个映射中包含的映射的 Set
视图。之后,我们可以调用 stream()
方法,该方法返回一个连续的 Stream
,以此集合作为其源。
map.entrySet().stream();
按 keys 对 Map
对象进行排序。
package org.websparrow.sorting;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
public class MapSortByKey {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(114, "Prince");
map.put(99, "Sandeep");
map.put(201, "Gaurav");
map.put(4, "Abhinav");
map.put(299, "Pallavi");
System.out.println("--- Unsorted Map ---");
System.out.println(map);
System.out.println("--- Sorted Map (Sorted by Key) ---");
map.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.forEach(System.out::println);
// Another way to sort a Map by keys
System.out.println("--- Sorted Map (Sorted by Key) ---");
map.entrySet()
.stream()
.sorted(Comparator.comparing(Map.Entry::getKey))
.forEach(System.out::println);
}
}
输出
--- Unsorted Map ---
{114=Prince, 99=Sandeep, 4=Abhinav, 201=Gaurav, 299=Pallavi}
--- Sorted Map (Sorted by Key) ---
4=Abhinav
99=Sandeep
114=Prince
201=Gaurav
299=Pallavi
--- Sorted Map (Sorted by Key) ---
4=Abhinav
99=Sandeep
114=Prince
201=Gaurav
299=Pallavi
或者,我们也可以调用 collect(Collectors.*toMap()*)
方法,该方法默认返回 HashMap
,我们需要 LinkedHashMap
来保持订单。
Map<Integer, String> sortedMap = map.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue, (oldValue, newValue) -> oldValue,
LinkedHashMap::new));
System.out.println(sortedMap);
输出
{4=Abhinav, 99=Sandeep, 114=Prince, 201=Gaurav, 299=Pallavi}
同样,我们也可以按 Map
对象的 values 对其进行排序。
package org.websparrow.sorting;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class MapSortByValue {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(114, "Prince");
map.put(99, "Sandeep");
map.put(201, "Gaurav");
map.put(4, "Abhinav");
map.put(299, "Pallavi");
System.out.println("--- Unsorted Map ---");
System.out.println(map);
System.out.println("--- Sorted Map (Sorted by Value) ---");
map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEach(System.out::println);
// Another way to sort a Map by values
System.out.println("--- Sorted Map (Sorted by Value) ---");
map.entrySet()
.stream()
.sorted(Comparator.comparing(Map.Entry::getValue))
.forEach(System.out::println);
}
}
输出
--- Unsorted Map ---
{114=Prince, 99=Sandeep, 4=Abhinav, 201=Gaurav, 299=Pallavi}
--- Sorted Map (Sorted by Value) ---
4=Abhinav
201=Gaurav
299=Pallavi
114=Prince
99=Sandeep
--- Sorted Map (Sorted by Value) ---
4=Abhinav
201=Gaurav
299=Pallavi
114=Prince
99=Sandeep
或者
Map<Integer, String> sortedMap = map.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue, (oldValue, newValue) -> oldValue,
LinkedHashMap::new));
System.out.println(sortedMap);
输出
{4=Abhinav, 201=Gaurav, 299=Pallavi, 114=Prince, 99=Sandeep}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.websparrow.org/java/how-to-sort-map-by-key-or-value-in-java-8
内容来源于网络,如有侵权,请联系作者删除!