Сбор списков в Java 8

#java #java-8 #functional-programming #java-stream

#java #java-8 #функциональное программирование #java-stream

Вопрос:

У меня есть этот фрагмент кода

 List<BookDto> deskOfficer =

        delegationExtendedDto
            .stream()
            .filter(Objects::nonNull)
            .filter(d -> d.getMembers() !=null amp;amp; !d.getMembers().isEmpty())
            .map(d -> d.getMembers()
                        .stream()
                        .filter(Objects::nonNull)
                        .filter(m -> RolesEnum.RESPONSIBLE_ADMIN.equals(m.getRole())))
                        .collect(Collectors.toList());
  

но у меня ошибка компиляции

 Type mismatch: cannot convert from List<Stream<BookDto>> to List<BookDto>
  

Ответ №1:

Вы, кажется, ищете flatmap как :

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