Cómo pasar de una lista a un constructor de un nuevo objeto utilizando java expresión lambda?

user3732445:

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:)

Ravindra Ranwala:

Es posible utilizar collectingAndThencolector de resolverlo de una sola vez. Utilice el toListcolector como el colector corriente abajo y pasar la WrapperDTO::newreferencia 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));

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=425377&siteId=1
Recomendado
Clasificación