gpt4 book ai didi

java - 如何按嵌套映射值对外部映射进行排序

转载 作者:行者123 更新时间:2023-12-02 09:43:32 27 4
gpt4 key购买 nike

我遇到了 Java 8 排序方法的问题。

我得到以下结构:

Map<String, Map<String, Long>>

我想要实现的是首先按外部映射的键(强制顺序)对外部映射进行排序,然后按内部映射值的总和(长整型)进行排序,然后以正确的顺序将其放入 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>>)

最佳答案

在这种情况下,您不能使用 comparingByValue,因为您不想按内部映射的各个条目进行排序。

你能做的最好的事情是:

List<Entry<String, Map<String, Long>>> result = queryResult.entrySet()
.stream()
.sorted(Comparator.comparing(Entry<String, Map<String, Long>>::getKey)
.thenComparingLong(e -> e.getValue()
.values()
.stream()
.mapToLong(i -> i)
.sum()))
.collect(Collectors.toList());

或者

List<Entry<String, Map<String, Long>>> result2 = queryResult.entrySet()
.stream()
.sorted(Entry.<String, Map<String, Long>>comparingByKey()
.thenComparingLong(e -> e.getValue()
.values()
.stream()
.mapToLong(i -> i)
.sum()))
.collect(Collectors.toList());

关于java - 如何按嵌套映射值对外部映射进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56852499/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com