【发布时间】:2019-07-02 12:28:11
【问题描述】:
我遇到了 Java 8 排序方法的问题。
我得到以下结构:
Map<String, Map<String, Long>>
我想要实现的是首先按外部映射的键(强制顺序)对外部映射进行排序,然后按内部映射值的总和(Longs),并以正确的顺序将其放入 Map.Entry 列表中。我设法使用第一个条件对其进行排序,但我无法使其在第二个条件下工作(thenComparing 方法) - 存在类型错误。
queryResult.allCountersArray = queryResult.allCounters.entrySet().stream()
.sorted(Map.Entry.<String, Map<String, Long>>comparingByKey(Comparator.comparing(term -> term.getSortingKey()))
.thenComparing(Map.Entry.<String, Map<String, Long>>comparingByValue(Map.Entry.<String, Long>comparingByValue()))
)
.collect(Collectors.toList());
Error:(87, 49) java: no suitable method found for comparingByValue(java.util.Comparator<java.util.Map.Entry<java.lang.String,java.lang.Long>>)
method java.util.Map.Entry.<K,V>comparingByValue() is not applicable
(explicit type argument java.util.Map<java.lang.String,java.lang.Long> does not conform to declared bound(s) java.lang.Comparable<? super java.util.Map<java.lang.String,java.lang.Long>>)
method java.util.Map.Entry.<K,V>comparingByValue(java.util.Comparator<? super V>) is not applicable
(argument mismatch; java.util.Comparator<java.util.Map.Entry<java.lang.String,java.lang.Long>> cannot be converted to java.util.Comparator<? super java.util.Map<java.lang.String,java.lang.Long>>)
【问题讨论】:
-
然后按内部映射值...:从技术上讲,内部映射将有多个键/值对。您想在排序中使用哪一个?
-
我很难解释这一点。我尝试按这些内部 Long 的总和对其进行排序。我现在正在编辑问题。
-
也许添加一个示例(输入 --> 预期输出)?
标签: java sorting java-stream