用流按值对javaMap进行排序

bnl4lu3b  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(338)

这个问题在这里已经有答案了

使用lambda和streams按值对Map排序(4个答案)
上个月关门了。
我见过大多数使用stream按值对Map进行排序的示例,但大多数示例使用的版本比我的略简单,不适用于我的案例。
有这个网站的例子类似于我的情况,但它没有工作得很好,因为它创建了“int不能被取消引用”错误,由于 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));
}

如果有人能指出我做错了什么,我将不胜感激。谢谢

gkn4icbw

gkn4icbw1#

假设age是int类型并且您想使用 Integer.compare(x,y) 版本:

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));

相关问题