【发布时间】:2021-03-01 21:32:09
【问题描述】:
我见过大多数使用 Stream 按值对地图进行排序的示例,但其中大多数使用的版本比我的稍微简单一些,因此不适用于我的情况。
有 this 网站提供与我的案例类似的示例,但由于 @ 导致“int cannot be dereferenced”错误,因此效果不佳987654322@ 函数,因为它不是用于比较基元。
我也尝试过使用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));
}
如果有人能指出我做错了什么,我将不胜感激。谢谢
【问题讨论】:
-
您的代码似乎有效,至少对我而言。什么不适合你?您能否添加一个示例输入和您的预期输出以及您的 Person 类?
-
@Eritrean 我想知道您是否尝试过注释掉 Comparator 版本并取消注释 getValue() 版本?
-
请看我的回答
-
@Eritrean 对我有用。非常感谢您的帮助。
-
只是在比较中交换e1和e2的顺序:
.sorted((e1,e2) -> Integer.compare(e2.getValue().getAge(), e1.getValue().getAge()))
标签: java sorting java-stream comparator