es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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ón flatMap() 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:

    List<string> hobbyList = 
        ListPerson.stream()
            .filter(p -> p.getDateDeNaissance().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().getYear() == 1999)
            .sorted(Comparator.comparingDouble(Individu::getWeight).reversed())
            .limit(20)
            .sorted(Comparator.comparingDouble(Individu::getHeight).reversed())
            .limit(5)
            .flatMap(person -> person.getListHobbys().stream())
            .distinct()
            .collect(Collectors.toList());
    

    Este código debería darte una lista de los pasatiempos de las 5 personas más pesadas (sin redundancia) que nacieron en 1999.

Comments are closed.