Java 使用 Stream 按值对地图进行排序
Java sort map by value with Stream
我看过大多数使用 Stream 按值对地图进行排序的示例,但其中大多数使用的版本比我的稍微简单一些,不适用于我的情况。
有一个 this 网站提供与我的案例类似的示例,但效果不佳,因为它创建了“int cannot be dereferenced " 由于 compareTo()
函数导致的错误,因为它不是用于比较基元。
我也试过使用Comparator.comparing()
,但对排序完全没有影响。
我有类似下面的东西;
Map<String, Person> sortedMap = sortPersonByValue(personMap);
public static Map<String, Person> sortPersonByValue(final Map<String, Person> regions) {
return regions.entrySet()
.stream()
.sorted(((e1, e2) -> e1.getValue().getAge().compareTo(e2.getValue().getAge()))
//.sorted(Comparator.comparing(e1 -> e1.getValue().getAge()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
}
如果有人能指出我做错了什么,我将不胜感激。谢谢
假设 Age 是一个 int 类型并且你想使用 Integer.compare(x,y)
version:
return regions.entrySet()
.stream()
.sorted((e1,e2) -> Integer.compare(e1.getValue().getAge(), e2.getValue().getAge()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
我看过大多数使用 Stream 按值对地图进行排序的示例,但其中大多数使用的版本比我的稍微简单一些,不适用于我的情况。
有一个 this 网站提供与我的案例类似的示例,但效果不佳,因为它创建了“int cannot be dereferenced " 由于 compareTo()
函数导致的错误,因为它不是用于比较基元。
我也试过使用Comparator.comparing()
,但对排序完全没有影响。
我有类似下面的东西;
Map<String, Person> sortedMap = sortPersonByValue(personMap);
public static Map<String, Person> sortPersonByValue(final Map<String, Person> regions) {
return regions.entrySet()
.stream()
.sorted(((e1, e2) -> e1.getValue().getAge().compareTo(e2.getValue().getAge()))
//.sorted(Comparator.comparing(e1 -> e1.getValue().getAge()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
}
如果有人能指出我做错了什么,我将不胜感激。谢谢
假设 Age 是一个 int 类型并且你想使用 Integer.compare(x,y)
version:
return regions.entrySet()
.stream()
.sorted((e1,e2) -> Integer.compare(e1.getValue().getAge(), e2.getValue().getAge()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));