【发布时间】:2019-06-20 17:46:46
【问题描述】:
我想通过 Id 获得最高分组。如果两个最高分相同,那么我想根据最低可选 ID 获得最高分。我想在 Java Stream 中获得它。到目前为止我正在尝试以下代码不起作用 示例:
数组列表:
ID:1 得分:80 OptionalId:1
ID:1 得分:90 OptionalId:2
ID:1 得分:90 OptionalId:3
ID:2 得分:80 OptionalId:1
ID:2 得分:100 OptionalId:3
ID:2 分数:100 OptionalId:5
结果应该是
ID:1 分数 90 OptionalId:2
ID 2 得分 100 OptionalId:3
Map<Long, Optional<Person>> result1 = records.stream()
.collect(Collectors.groupingBy(Person::getId,
Collectors.maxBy(Comparator.comparing(Person::getScore)),
Collector.minBy(Comparator.comparing(Person::getOptionalId))));
for(Person ns: result1) {
sb.append(ns.getBatchNumber());
sb.append(',');
【问题讨论】:
-
80分的分数怎么了?
-
80分应该淘汰。我只取每组的最高分。从上面的例子中,80是最低的,有两个90是最高的。两个之间我只取一个90可选 ID 最低的最高者。目前,max by 是从两个 90 年代随机取最高值,我不想要
-
@TimBiegeleisen:消失了。请注意应用于分数的
Collectors.maxBy。 -
OptionalId真的是java.util.Optional?或int/long?
标签: java lambda java-8 java-stream comparator