Ordenar y agrupar por encontrar y máximo de cada grupo en Java 8

shraddha:

Tengo un objeto que tiene un nombre y una puntuación. Quiero ordenar los elementos por su nombre y encontrar la puntuación máxima para ese nombre.

Por ejemplo a continuación son los objetos ( nombre , puntuación ):

(a, 3)
(a, 9)
(b, 7)
(b, 10)
(c, 8)
(c, 3)

La salida debe ser:

(a, 9)
(b, 10)
(c, 8)

Soy capaz de resolver mediante el siguiente código, pero no soy capaz de averiguar máximo

List<Record> result = list.stream()
        .sorted(Comparator.comparing(Record::score))
        .collect(Collectors.groupingBy(Record::name, LinkedHashMap::new, Collectors.toList()))
        .values().stream()
        .flatMap(Collection::stream)
        .collect(Collectors.toList());
Eran :

Es necesario que la cadena maxBya la groupinhByCollectior:

Map<String,Record> result = 
    list.stream()
        .sorted(Comparator.comparing(Record::score))
        .collect(Collectors.groupingBy(Record::name, 
                                       LinkedHashMap::new,
                                       Collectors.maxBy(Comparator.comparing(Record::getScore))));

Y si sólo se preocupan por los Recordcasos, se puede obtener el values()de aquel Map.

Supongo que te gusta

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