java - 多级列表过滤java 8

标签 java java-8 java-stream

我正在处理多层次深度的类(class)。我试图在内部深度进行过滤,但收到错误

Bad return type in lambda expression: Stream<InnerClassName> cannot be converted to boolean 

我的类(class)结构是

class A {
    List<B> B;
    Integer Id;
}

class B {
        List<C> C;
        Integer Id;
    }


class C {                    
         Integer Id;
        }

如果我有一个名为 AList 的列表 我尝试过这样做

AList.getBlist().stream().filter(bList -> bList.getId.equals(5));

效果很好。我想要完成的是使用 Class C 内的值进行过滤,可以通过 Blist.getClist

获得

最佳答案

如果您尝试过滤 List<A> 的内容并获得与输出相同的格式,您可以将其执行为:

List<A> output = aList.stream()
        .filter(a -> a.getBList().stream() // bList from a
                .flatMap(b -> b.getCList().stream()) // cList from each b
                .anyMatch(c -> c.getId() == 5)) // equals(5)
        .collect(Collectors.toList());

上面的代码过滤了 List<A> 中的所有“A”这样 List<C> 的任何“C”部分List<B> 的任何“B”部分内A 内符合给定条件。

关于java - 多级列表过滤java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54767779/

相关文章:

java - 带下划线的流过滤方法

Java 8 流 : count all elements which enter the terminal operation

Java 8 等同于 Streams 的 getLineNumber()

java - 我可以在php中使用base64解码用java编码的数据吗?

java - 使用 Java 的 Selenium - 无法在 Google 搜索页面上找到 Webelements

java - 使用 spring batch 在 Map 上存储文件的最佳实践

java - 加载图像时遇到问题

java - 在并行流式处理之前或期间有效地预处理 CSV 数据

functional-programming - Java 8函数样式以索引进行迭代

java - 什么是使 Java8 流生成格式化字符串的高效方法