Java 8 流映射到按值排序的键列表

2022-08-31 14:29:16

我有地图,我想有一个列表,它按相应的值对键进行排序(最小到最大)。我的尝试是:Map<Type, Long> countByType

countByType.entrySet().stream().sorted().collect(Collectors.toList());

然而,这只是给了我一个条目列表,我如何获得类型列表,而不会丢失顺序?


答案 1

你说你想按值排序,但你的代码中没有。将 lambda(或方法引用)传递给 它,以告知它您希望如何排序。sorted

你想得到钥匙;用于将条目转换为键。map

List<Type> types = countByType.entrySet().stream()
        .sorted(Comparator.comparing(Map.Entry::getValue))
        .map(Map.Entry::getKey)
        .collect(Collectors.toList());

答案 2

您必须根据条目的值使用自定义比较器进行排序。然后在收集之前选择所有密钥

countByType.entrySet()
           .stream()
           .sorted((e1, e2) -> e1.getValue().compareTo(e2.getValue())) // custom Comparator
           .map(e -> e.getKey())
           .collect(Collectors.toList());