我的课程结构-
class A {
List<B> bList;
}
class B {
List<C> cList;
}
现在我有一个类A的列表,我想根据c.size()> 0的条件对其进行过滤。我可以使用2来过滤它,其中一个用于列表A,另一个用于列表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);
}
}
答案 0 :(得分:10)
是的,您可以:
List<A> result =
listOfA.stream()
.filter(a -> a.b.stream().anyMatch(b -> b.c.size() > 0))
.collect(Collectors.toList());
这是假设您要添加每个将过滤器传递到输出A
的{{1}}实例。
答案 1 :(得分:1)
尝试一下。 items是要过滤的列表。
List<A> result = new ArrayList<>();
result = items.stream().filter(a -> a.b.stream().filter(b -> b.c.size() > 0).count() > 0).collect(Collectors.toList());