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.

Mapear una lista a un DTO dentro de un mapa – java

Tengo una colección como esta: Map<Integer, List<MyObject>> collection
Me gustaría mapear toda la lista de MyObject a MyObjectDTO y devolver el mapa completo con la lista mapeada.

Entonces, el resultado sería:
Map<Integer, List<MyObjectDto>> collectionWithDtos

¿Cuál es la manera más fácil y rápida? He probado con algunos métodos usando streams, pero ninguno de ellos me dio los resultados que esperaba.
Gracias

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una forma de lograr este mapeo es utilizando el método stream() de Map y para cada entrada, mapear su List<myobject> a una List<myobjectdto> utilizando el método map() de Stream. Luego, utilizar el método collect() para recolectar las entradas mapeadas en un nuevo Map. Aquí está el código:

    Map<integer,></integer,><myobjectdto>> collectionWithDtos = 
        collection.entrySet()
                  .stream()
                  .collect(Collectors.toMap(
                       Map.Entry::getKey, 
                       e -> e.getValue()
                             .stream()
                             .map(MyObjectDTO::new) // asumiendo que MyObjectDTO tiene un constructor que toma un parámetro MyObject
                             .collect(Collectors.toList())));
    

    Este código crea un nuevo Map<integer,></integer,><myobjectdto>> donde cada entrada tiene la misma clave que la colección original, pero su valor es una List<myobjectdto> mapeada en lugar de la List<myobject> original. Los objetos MyObjectDTO se crean utilizando la palabra clave new y un constructor asumido que toma un parámetro MyObject.

Comments are closed.