MWB:
Decir que tengo una lista de People
con atributos nombre y edad. ¿Cómo consigo todas las instancias de los People
que tienen el mayor valor para el atributo edad, utilizando una corriente?
Actualmente, estoy usando un enfoque de dos pasos:
1) Encontrar el valor máximo de edad
int maxAge = group
.stream()
.mapToInt(person -> person.getAge())
.max()
.orElse(-1);
2) Crear una lista de People
con esa edad
List<Group> groupWithMaxAge = group
.stream()
.filter(person -> person.getAge() == maxAge)
.collect(Collectors.toList());
No se preocupe, esto funciona. Sin embargo, consideremos el caso de que el cálculo de la edad es una función caro. En ese caso, sería bueno si pudiera hacerlo de una sola vez, ¿verdad?
Ruslan:
También puede utilizar groupingBy con TreeMap como MapFactory:
List<Group> list = people.stream()
.collect(groupingBy(Group::getAge, TreeMap::new, toList()))
.lastEntry()
.getValue();