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