java - 在 Java 8 中收集列表

标签 java java-8 functional-programming 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());

但是我有一个编译错误

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

最佳答案

您似乎正在寻找 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());

关于java - 在 Java 8 中收集列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55140299/

相关文章:

java - 在 Spring 的构建后阶段之前注入(inject) mock

java - 如何使用 Java Streams 将未修改列表中的元素包含在修改列表中?

c - 过程式语言和函数式语言之间的区别?

python - 一段代码的解释

Java堆外内存和大页面

java - 如何在 Java 中使用 Mockito 模拟结果集并填充它

Java 反射调用方法 NoSuchMethodException

java - 使用Comparator.comparingLong比long.compare有什么优势?

java - 为什么 for(T t : this) work and what does it mean?

functional-programming - 如何测试两个功能是否相同?