我在理解流方面遇到了一些麻烦。我环顾四周,似乎找不到符合我用例的例子。
我有一个现有的嵌套for循环:
List<ObjectB> objectBs = new ArrayList<ObjectB>();
for (ObjectA objA: objectAList) {
for (ObjectB objB: objA.getObjectBList()) {
if (objB.getNumber() != 2) {
objectBs.add(objB);
}
}
}
很多示例显示了如何将objB.getNumber()
添加到列表中但不是objB
。
答案 0 :(得分:7)
您可以使用flatMap
获取所有Stream<ObjectB>
个实例的ObjectB
个,并过滤所需数量的ObjectB
:
List<ObjectB> objectBs =
objectAList.stream()
.flatMap (a -> a.getObjectBList().stream())
.filter (b -> b.getNumber() != 2)
.collect (Collectors.toList());