反向排序HashMap? [复制]

Posted

技术标签:

【中文标题】反向排序HashMap? [复制]【英文标题】:sort HashMap in reverse? [duplicate] 【发布时间】:2017-07-20 23:26:03 【问题描述】:

所以我遇到了这种能够按值对 HashMap 进行排序的方法。

public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) 
        return map.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByValue())
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        Map.Entry::getValue,
                        (e1, e2) -> e1,
                        LinkedHashMap::new
                        ));
    

我想在Comparator 上使用reversed() 方法,但我似乎找不到合适的放置位置。

【问题讨论】:

***.com/a/28607267/616460 @JornVernee 不起作用 “不起作用”? “不起作用”怎么办? @LewBloch .sorted(Map.Entry.comparingByValue().reversed()) 无法编译。 Mureinik 的解决方案有效 【参考方案1】:

应该在comparingByValue() 返回的Comparator 上调用reversed() 方法。不幸的是,Java 的类型推断在这里失效,因此您必须指定泛型类型:

public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue
    (Map<K, V> map) 

    return map.entrySet()
            .stream()
            .sorted(Map.Entry.<K, V> comparingByValue().reversed())
            // Type here -----^ reversed() here -------^
            .collect(Collectors.toMap(
                    Map.Entry::getKey,
                    Map.Entry::getValue,
                    (e1, e2) -> e1,
                    LinkedHashMap::new
            ));

【讨论】:

@BenArnao 这正是为什么在您的问题中包含您尝试过的内容以及清楚说明您尝试过的内容为何无效的原因通常是一个好主意的原因。 谢谢,这正是我所需要的。我尝试在那个地方使用 reversed() 但它不起作用,因为我必须指定类型。

以上是关于反向排序HashMap? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

根据值然后键对HashMap进行排序? [复制]

如何根据日期对 HashMap 进行排序? [复制]

java HashMap 排序 <String,Integer> 。如何排序? [复制]

按日期对 HashMap 进行排序

Java 有反向查找的 HashMap 吗?

hashmap按value排序