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 maxBy
a la groupinhBy
Collectior:
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 Record
casos, se puede obtener el values()
de aquel Map
.