【发布时间】:2025-12-17 19:45:01
【问题描述】:
我有 HashMap 并尝试按值倒序排序,我下面的代码按升序工作,
LinkedHashMap<String, AtomicInteger> collect = counterMap.entrySet()
.stream()
.sorted(Comparator.comparingInt(a -> a.getValue().get()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
不幸的是,我不能在 sorted 方法中使用 reverseOrder()。
欢迎任何建议或想法。谢谢!
【问题讨论】:
-
“我不能在 sorted 方法中使用 reverseOrder()”为什么?
-
使用这个技巧
...sorted(Comparator.comparingInt(a -> a.getValue().get()*-1)) -
@AndrewTobilko 编译器向我抛出“无法解析方法 getValue()”错误。 Hadi J 的 hack 效果很好,而且很棒。谢谢哈迪 J. :-)
-
@parrotjack 这不是那真棒;)当有专门设计的方法时:
reversed()。看看我的回答 -
@HadiJ 除了
x * -1是-x的冗长变体这一事实之外,这是一个失败的解决方案,就像Integer.MIN_VALUE一样,它不会 这样做正确的事情。由于这是一个特殊的稀有值,因此此类代码可能会通过所有测试,但会在生产环境中突然产生难以重现的错误。
标签: java lambda java-8 java-stream comparator