MWB:
Digamos que eu tenha uma lista de People
com atributos nome e idade. Como faço para obter todas as instâncias de People
que têm o maior valor para a idade atributo, usando um fluxo?
Atualmente, estou usando uma abordagem em duas fases:
1) Encontrar o valor máximo de idade
int maxAge = group
.stream()
.mapToInt(person -> person.getAge())
.max()
.orElse(-1);
2) Criar uma lista de People
com essa idade
List<Group> groupWithMaxAge = group
.stream()
.filter(person -> person.getAge() == maxAge)
.collect(Collectors.toList());
Não se preocupe, isso funciona. No entanto, considere o caso em que o cálculo da idade é uma função caro. Nesse caso, seria bom se você pudesse fazê-lo de uma só vez, não é?
Ruslan:
Você também pode usar groupingBy com TreeMap como um mapFactory:
List<Group> list = people.stream()
.collect(groupingBy(Group::getAge, TreeMap::new, toList()))
.lastEntry()
.getValue();