如何收集/减少java 8流到pojo?

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中,而不是集合,流或映射.

Eug*_*ene 1

我没有编译这个,只是为了给你一个想法:

 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)