car*_*era 5 java functional-programming java-8 java-stream
我有这段代码
List<BookDto> deskOfficer =
delegationExtendedDto
.stream()
.filter(Objects::nonNull)
.filter(d -> d.getMembers() !=null && !d.getMembers().isEmpty())
.map(d -> d.getMembers()
.stream()
.filter(Objects::nonNull)
.filter(m -> RolesEnum.RESPONSIBLE_ADMIN.equals(m.getRole())))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但我有一个编译错误
Type mismatch: cannot convert from List<Stream<BookDto>> to List<BookDto>
Run Code Online (Sandbox Code Playgroud)
You seem to be looking for flatmap
as :
List<BookDto> deskOfficer = delegationExtendedDto
.stream()
.filter(Objects::nonNull)
.filter(d -> d.getMembers() != null) // stream would handle the empty case
.flatmap(d -> d.getMembers().stream()) // <<< here -- the stream objects are different
.filter(Objects::nonNull)
.filter(m -> RolesEnum.RESPONSIBLE_ADMIN.equals(m.getRole())))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)