【问题标题】:Filter inside Filter过滤器内过滤器
【发布时间】:2022-01-08 09:05:14
【问题描述】:

我有一个对象 A 的列表。此对象 A 有一个 对象 B 列表作为属性。 鉴于此,我试图根据 B 类型对象的属性(假设它是一个 ID)过滤 A 类型数组。

例子:

listOfObjectA = listOfObjectA.stream().filter(a -> a.getListOfB().stream().filter(b -> b.getId() == 10));

我删除了.collect(Collectors.toList()) 以使帖子“更干净”。

这样,我收到了这个错误:Type mismatch: cannot convert from List<B> to boolean

我也尝试了 findAny,但也没有好的结果。

【问题讨论】:

  • "... a -> c.getListOfB()..." - 这看起来很可疑。 c 是什么?在这里使用c是否正确?
  • 对不起,我的意思是'a'
  • 如果要保留至少包含一个 ID 为 10 的 ObjectBObjectA 元素,则“内部”过滤器应为 anyMatch(b -> b.getId() == 10)。如果所有 ObjectB 元素的 ID 必须为 10 ,请改用allMatch

标签: java filter


【解决方案1】:

将第二个“过滤器”替换为“anyMatch”。这将返回一个布尔值,将在第一个“过滤器”中使用:

listOfObjectA = listOfObjectA.stream().filter(a -> a.getListOfB().stream().anyMatch(b -> b.getId() == 10));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多