gpt4 book ai didi

java-8 - 基于多个值对 map 进行排序(Java8/Jooq)

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

我们有一个看起来像这样的数据结构:

Map<String, Double> responseMap;

并根据值按降序对这张 map 进行排序:

responseMap.entrySet().stream()
.sorted((Map.Entry.<String, Double>comparingByValue().reversed()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new));

现在这张 map 的数据结构变成了这样的:

Map<String, Tuple2<Double, Integer> responseMap;  //org.jooq.lambda.tuple.Tuple2

我们如何根据新值(基于 Double 值和 Integer)清楚地对该映射进行排序?

最佳答案

你应该简单地改变比较器:

responseMap.entrySet().stream()
.sorted(Comparator.comparing((Map.Entry<String, Tuple2<Double, Integer> e) ->
e.getValue().v1())
.thenComparing(e -> e.getValue().v2())
.reversed())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new));

编辑(根据评论):

或者,您也可以使用:

responseMap.entrySet().stream()
.sorted(Comparator.comparing(Collections.reverseOrder(Map.Entry.comparingByValue(
Comparator.comparing(Tuple2::v1).thenComparing(Tuple2::v2)))))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new));

关于java-8 - 基于多个值对 map 进行排序(Java8/Jooq),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53229548/

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