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));