【发布时间】:2018-06-22 18:24:35
【问题描述】:
我的班级结构 -
class A {
List<B> bList;
}
class B {
List<C> cList;
}
现在我有一个 A 类列表,我想根据 c.size() > 0 的条件对其进行过滤。我可以使用 2 for loop one for list A 和 other for list B 过滤它,但我想知道我可以使用没有 for 循环的 java 流 api 过滤 A 的列表。
我当前的代码(更新的代码)-
List<A> result = = new ArrayList<>();
for (A a : aList) {
List<B> tempBList = = new ArrayList<>();
for (B b : a.getBList) {
if (b.getCList.size() > 0) {
tempBList.add(b);
}
}
if (tempBList.size() > 0) {
a.setBList(tempBList);
result.add(a);
}
}
【问题讨论】:
-
您可能忘记在您的示例中的
result.add(a);之后放置break;语句 -
@lino 没有什么可以打破的。他需要收集与给定谓词匹配的所有
A实例。不要像这样添加虚假的 cmets。 -
@RavindraRanwala 目前他为每个匹配条件
b.c.size() > 0的b添加了一个a实例。对我来说这看起来像是一个错字 -
@Lino 不,这不是错字,这是他需要的。他使用公共字段而不是 getter。
-
@RavindraRanwala 我认为我们彼此相邻。
a.b是List。 OP 遍历该列表。然后检查项目b是否有一个大于0 的列表b.c。如果是,则将a添加到结果中。当前代码为每个b执行此操作。这意味着结果列表中可能有多个相同的a实例
标签: java lambda java-8 java-stream