Como compilar uma lista de todos os objetos com valor máximo de um determinado atributo usando stream?

MWB:

Digamos que eu tenha uma lista de Peoplecom atributos nome e idade. Como faço para obter todas as instâncias de Peopleque 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 Peoplecom 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();

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=199770&siteId=1
Recomendado
Clasificación