【发布时间】:2020-03-15 21:55:47
【问题描述】:
我想知道流(或收集器)中是否已经实现了一个功能,它首先按属性对流进行分组,然后返回列表中按另一个属性排序的第一个元素。例如。以下代码尝试使用第一个属性对对象流进行分组,然后想要收集具有第二个属性的最高值的对象。
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);
}
}
}
任何帮助将不胜感激。
【问题讨论】:
-
'....使用第一个属性对对象流进行分组,然后想要收集具有第二个属性的最高值的对象。' 你能包括带有此语句预期输出的示例输入?
标签: java java-8 java-stream