У меня есть проблема , когда я хочу , чтобы преобразовать список POJOs Into DTOS и передать их в объект обертку , который затем вернулся . Рассмотрим этот рабочий кусок кода:
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. Это то, что я сделал до сих пор. Я могу сделать преобразование из POJOs в DTOS, но я изо всех сил, чтобы передать список DTOS конструктору нового объекта оболочки.
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
ссылку конструкторы в качестве финишера функции. Вот как это выглядит.
final WrapperDTO wrapper = devices.stream()
.map(d -> convertToDTO(d))
.collect(Collectors.collectingAndThen(Collectors.toList(), WrapperDTO::new));