Мне интересно, существует ли уже реализованная функция в потоках (или коллекторах), которая сначала группирует поток по атрибуту, а затем возвращает первый элемент в списке, отсортированный по другому атрибуту. Например, следующий код пытается сгруппировать поток объектов, используя первый атрибут, а затем хочет собрать тот объект, который имеет наибольшее значение второго атрибута.
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.
Мой код, использующий simple для l oop:
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);
}
}
}
Любая помощь будет высоко ценится.