Mostrar los elementos (sin redundancia) de una lista en un flujo de lista en Java.
Tengo una lista de personas que tienen:
Lista de aficiones {juegos, esquí, fútbol …)
altura
peso
año de nacimiento
Quiero mostrar la lista (sin redundancia) de las aficiones de las 5 personas más pesadas de los 20 individuos más grandes nacidos en 1999.
Tengo una lista de flujos:
List<string> question7 = ListPerson.stream()
.filter(p -> p.getDateDeNaissance().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().getYear() == 1999)
.sorted(Comparator.comparingDouble(p -> ((Person) p).getHeight()).reversed())
.limit(20)
.sorted(Comparator.comparingDouble(p -> ((Individual) p).getWeight()).reversed())
.limit(5)
.map(s -> s.getListHobbies())
.flatMap(Collection::stream)
.collect(Collectors.toList());
Pero no obtengo lo que quiero y hay redundancia. ¿Alguien puede preguntarme cómo puedo hacer eso?
davy.ai
Hay algunos ajustes que puedes hacer a tu código actual para lograr la salida deseada sin redundancia.
En primer lugar, puedes usar el método
distinct()
después de aplicar la operaciónflatMap()
para eliminar cualquier pasatiempo duplicado de la lista.En segundo lugar, debes asegurarte de que se use el método
sorted()
en el orden correcto. En tu código actual, estás ordenando primero por altura y luego por peso. Deberías ordenar primero por peso y luego por altura para obtener a los 5 individuos más pesados.Aquí está el código actualizado:
Este código debería darte una lista de los pasatiempos de las 5 personas más pesadas (sin redundancia) que nacieron en 1999.