如何使用Java Lambda表达式将列表传递给新对象的构造函数?

问题描述 投票:4回答:2

我有一个问题,其中我想将POJO的列表转换为DTO,然后将它们传递给包装对象,然后返回包装对象。考虑这段working代码:

List<Device> devices = dbService.getDevices(...);
List<DeviceDTO> devicesDTO = new ArrayList<DeviceDTO>();
for (Device d : devices) {
   devicesDTO.add(convertToDTO(d));
}

WrapperDTO wrapper = new WrapperDTO(devicesDTO);

我正在寻找一种使用Java lambda表达式将其重写为更小巧,更优雅的代码的方法。到目前为止,这是我所做的。我可以进行从POJO到DTO的转换,但是我正努力将DTO列表传递给新包装对象的构造函数。

List<Device> devices = dbService.getDevices(...);
List<DeviceDTO> devicesDTO = devices.stream().map(d -> convertToDTO(d)).collect(Collectors.toList());

WrapperDTO wrapper = new WrapperDTO(devicesDTO);

我怎么能缩短单线,像这样?

WrapperDTO wrapper = devices.stream()........collect( () -> WrapperDTO:new);

显然,最后一块不起作用,但是我想实现这一点。有什么建议么?谢谢我的朋友们:)

java lambda java-8 refactoring collectors
2个回答
6
投票

您可以使用collectingAndThen收集器立即执行。将toList收集器用作下游收集器,并将WrapperDTO::new构造函数引用作为装订器功能。这是它的外观。


2
投票

有一个顽皮的秘密:

© www.soinside.com 2019 - 2024. All rights reserved.