gpt4 book ai didi

Java Stream按一个属性分组并按另一个属性收集最大元素

转载 作者:行者123 更新时间:2023-12-01 11:04:46 25 4
gpt4 key购买 nike

我想知道流(或收集器)中是否已经实现了一个功能,它首先按属性对流进行分组,然后返回按另一个属性排序的列表中的第一个元素。例如。以下代码尝试使用第一个属性对对象流进行分组,然后想要收集具有第二个属性的最高值的对象。

class MyClass{
String att1;
String att2;
}

现在,我想用 Stream myClassStream 来实现这样的东西 -
Map<String,MyClass> myMap = myClassStream().collect(Collectors.groupingBy(MyClass::getAtt1)); //Now I want to do Sorting after grouping to collect only the element which has the highest value of attr2.

我使用简单 for 循环的代码是:
Map<String, MyClass> postAnalyticsMap = new HashMap<>();
for (MyClass post : myClassList) {
if (post.get(post.getAtt1()) == null) {
post.put(post.getAtt1(), post);
} else {
MyClass existingClass = postAnalyticsMap.get(post.getAtt1());
if (existingPostAnalytics.getAtt2() < post.getAtt2()) {
postAnalyticsMap.put(post.getAtt1(), post);
}
}
}

任何帮助都感激不尽。

最佳答案

使用 toMap使用合并函数查找第二个属性上的最大元素

Map<String, MyClass> map = myClassList.stream()
.collect(Collectors.toMap(MyClass::getAtt1, Function.identity(),
BinaryOperator.maxBy(Comparator.comparing(MyClass::getAtt2))));

关于Java Stream按一个属性分组并按另一个属性收集最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60684871/

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