我们有一个看起来像这样的数据结构:
Map<String, Double> responseMap;
然后根据值按降序对地图进行排序:
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<String, Tuple2<Double, Integer> responseMap; //org.jooq.lambda.tuple.Tuple2
我们如何整洁地根据新值(基于Double值和Integer)将此映射排序?
答案 0 :(得分:4)
您只需更改比较器:
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));