按降序对映射进行排序java8 private static

按降序对映射进行排序java8 private static,java,sorting,dictionary,java-8,Java,Sorting,Dictionary,Java 8,您可以使用已经提供的comparator,将compareTo返回值乘以-1,或者简单地交换参数(以考虑角情况) 您可以使用来反转比较的意义,以便按降序排序 这里的类型推断似乎有点不对劲,但为comparingByValue()提供显式类型参数可以解决这个问题 (a,b)-->{comparingByValue().compareTo(b,a)} st.sorted(Map.Entry.comparingByValue().reversed()) .forEachOrdered(e->r

您可以使用已经提供的comparator,将compareTo返回值乘以-1,或者简单地交换参数(以考虑角情况)

您可以使用来反转比较的意义,以便按降序排序

这里的类型推断似乎有点不对劲,但为
comparingByValue()
提供显式类型参数可以解决这个问题

(a,b)-->{comparingByValue().compareTo(b,a)}
st.sorted(Map.Entry.comparingByValue().reversed())
.forEachOrdered(e->result.put(e.getKey(),e.getValue());

在回答这个问题之前?你在哪里找到答案,你修补了什么,你在这段代码中看到的API调用的文档有没有查过,等等?顺便说一下,不要使用
.forEach/.forEachOrdered
向映射添加条目,只需使用collect with
Collectors.toMap
即可。为什么不使用
compareTo(b,a)
?从数学上讲,这两种方法是等效的,从性能上看,您的版本更快。最后,我认为这不重要。不完全等效:比较器可能返回
Integer.MIN_值
,以指示
a
public static <K, V extends Comparable<? super V>> Map<K, V>
sortByValue( Map<K, V> map )
{
    List<Map.Entry<K, V>> list =
            new LinkedList<Map.Entry<K, V>>( map.entrySet() );
    Collections.sort( list, new Comparator<Map.Entry<K, V>>()
    {
        public int compare( Map.Entry<K, V> o1, Map.Entry<K, V> o2 )
        {
            return (o2.getValue()).compareTo( o1.getValue() );//change o1 with o2
        }
    } );

    Map<K, V> result = new LinkedHashMap<K, V>();
    for (Map.Entry<K, V> entry : list)
    {
        result.put( entry.getKey(), entry.getValue() );
    }
    return result;
}
(a,b)-->{comparingByValue().compareTo(b,a)}
st.sorted( Map.Entry.<K, V>comparingByValue().reversed() )
       .forEachOrdered(e -> result.put(e.getKey(), e.getValue()));