Che*_*rry 5 java reduce collect java-8 java-stream
看看代码:
Collection<MyDto> col = ...
MyBuilder builder = new MyBuilder();
for (MyDto dto: col) {
switch (dto.getType()) {
case FIELD1:
builder.field1(dto.getValue());
break:
case FIELD2:
builder.field2(dto.getValue());
break:
}
}
Some result = builder.build();
Run Code Online (Sandbox Code Playgroud)
有没有办法用流来做到这一点,比如:
Some result = col.stream().collect(...)
Run Code Online (Sandbox Code Playgroud)
请注意,所有流值都收集到sigle pojo中,而不是集合,流或映射.
我没有编译这个,只是为了给你一个想法:
Map<Boolean, List<MyDto>> map = col.stream().collect(Collectors.partitioningBy(t -> t.getType() == FIELD2));
map.get(false).forEach(x -> builder.field1(x.getValue()))
map.get(true).forEach(x -> builder.field2(x.getValue()))
Run Code Online (Sandbox Code Playgroud)