我有一个问题,其中我想将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);
显然,最后一块不起作用,但是我想实现这一点。有什么建议么?谢谢我的朋友们:)
您可以使用collectingAndThen
收集器立即执行。将toList
收集器用作下游收集器,并将WrapperDTO::new
构造函数引用作为装订器功能。这是它的外观。
有一个顽皮的秘密: