Javaのラムダ式を使用して新しいオブジェクトのコンストラクタにリストを渡す方法は?

user3732445:

私は、問題持って、私はのDTOへのPOJOのリストを変換してから返されたラッパーオブジェクトにそれらを渡したいがこの検討する作業コードの一部を:

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のラムダ式を使用して、コードの小さい、多分よりエレガントな、作品にこれを書き換えるための方法を探しています。これは私がこれまで行っているものです。私はのDTOへのPOJOからの変換を行うことができますが、私は、新しいラッパーオブジェクトのコンストラクタにの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);

もちろん、最後のピースが作動していませんが、それは私が達成したいものです。助言がありますか?私の友人ありがとう:)

ラビンドラ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=425061&siteId=1