Tengo un problema en el que yo quiero convertir una lista de POJOs en dtos y transferirlas a un objeto contenedor que se devuelve a continuación . Considere este trabajo trozo de código:
List<Device> devices = dbService.getDevices(...);
List<DeviceDTO> devicesDTO = new ArrayList<DeviceDTO>();
for (Device d : devices) {
devicesDTO.add(convertToDTO(d));
}
WrapperDTO wrapper = new WrapperDTO(devicesDTO);
Estoy buscando una manera de volver a escribir esto en más pequeño, tal vez más elegante, pieza de código utilizando expresiones lambda Java. Esto es lo que he hecho hasta ahora. Puedo hacer la conversión de POJO a DTO pero estoy luchando para aprobar la lista de dtos al constructor de un nuevo objeto envoltorio.
List<Device> devices = dbService.getDevices(...);
List<DeviceDTO> devicesDTO = devices.stream().map(d -> convertToDTO(d)).collect(Collectors.toList());
WrapperDTO wrapper = new WrapperDTO(devicesDTO);
¿Cómo podría conseguirlo aún más corto de una sola línea, algo como esto?
WrapperDTO wrapper = devices.stream()........collect( () -> WrapperDTO:new);
Obviamente, la última pieza no está funcionando pero eso es algo que me gustaría lograr. ¿Alguna sugerencia? Gracias amigos:)
Es posible utilizar collectingAndThen
colector de resolverlo de una sola vez. Utilice el toList
colector como el colector corriente abajo y pasar la WrapperDTO::new
referencia constructor como la función de acabado. Así es como se ve.
final WrapperDTO wrapper = devices.stream()
.map(d -> convertToDTO(d))
.collect(Collectors.collectingAndThen(Collectors.toList(), WrapperDTO::new));