Cómo compilar una lista de todos los objetos con valor máximo de un determinado atributo utilizando corriente?

MWB:

Decir que tengo una lista de Peoplecon atributos nombre y edad. ¿Cómo consigo todas las instancias de los Peopleque 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 Peoplecon 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();

Supongo que te gusta

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