java - 如何根据其值的参数对 Map 进行排序?

标签 java java-8

<分区>

Stream<Map.Entry<String, List<Object>>> sorted = index.entrySet().stream()
                .sorted(Map.Entry.comparingByValue());

The method sorted(Comparator<? super Map.Entry<String,List<NFArticle>>>) in the type Stream<Map.Entry<String,List<NFArticle>>> is not applicable for the arguments (Comparator <Map.Entry<Object,Comparable<? super Comparable<? super V>>>>)

我想对 Hashmap 进行排序根据size()列表的值是 HashMap 的值.如何使用 Java 8 中的 Stream 库实现此目的?

最佳答案

这可能对你有帮助。

我将结果映射的类型更改为 LinkedHashMap 以遵守插入顺序。

public static void main(String[] args) {
    final Map<String, List<Integer>> map = new HashMap<>();
    map.put("k1", Arrays.asList(new Integer[]{1, 2, 3, 4, 5}));
    map.put("k2", Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6}));
    map.put("k3", Arrays.asList(new Integer[]{1, 2, 3}));
    System.out.println(getMapSortedByListSize(map));
}

public static <K, V> Map<K, List<V>> getMapSortedByListSize(final Map<K, List<V>> map) {
    return map.entrySet().stream()
            .sorted((e1, e2) -> e1.getValue().size() - e2.getValue().size())
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, LinkedHashMap::new));
}

关于java - 如何根据其值的参数对 Map 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29936581/

相关文章:

Java,将布局设置为空

java - 将 org.threeten.bp.* 和 org.joda.time* 转换为相应的 java.time.* 类的最佳方法

java - IntStream 逐步迭代

java - objectify.LoadException : java. time.LocalDateTime 必须有一个无参数构造函数

java.time : DateTimeParseException for date "20150901023302166"

java - 使用 Java-8 LocaldateTime 比较 future 三天的日期和时间

java - 当大型 HTML 页面加载时,AJAX 从大型 HTML 页面获取数据

java - Android : ColorPicker only showing one color, 和从调色板中选择错误的颜色

java - 如何区分客户端请求返回我的 REST Web 服务的格式?

java - 在防火墙后使用 JMX 连接到远程 JBoss