Как передать список в конструктор нового объекта с использованием Java лямбда-выражения?

user3732445:

У меня есть проблема , когда я хочу , чтобы преобразовать список 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);

Очевидно, что последняя часть не работает, но это то, что я хотел бы достичь. Какие-либо предложения? Спасибо вам, мои друзья:)

Ravindra Ranwala:

Вы можете использовать collectingAndThenколлектор , чтобы решить ее одним махом. Используйте toListколлектор в качестве нижнего коллектора и передать WrapperDTO::newссылку конструкторы в качестве финишера функции. Вот как это выглядит.

final WrapperDTO wrapper = devices.stream()
    .map(d -> convertToDTO(d))
    .collect(Collectors.collectingAndThen(Collectors.toList(), WrapperDTO::new));

рекомендация

отhttp://10.200.1.11:23101/article/api/json?id=424683&siteId=1