我需要从列表(classB)中遍历一个列表(class A)。我想使用流JAVA8,但通过第二个列表,我失去了第一个列表的引用
class A {
Collection<B> listB ;
String x;
// Some other variables
}
class B {
String y;
// Some other variables
}
// List object A
Collection<class A> listA;
listA.stream()
.filter(a -> a.getListaB() != null)
.flatMap(a -> a.getListB().stream())
.forEach(b -> {
// Here lose reference object A
// I need something like a.getX()
// I need too use something like b.getY(), use both lists
});
错误是“找不到simbol变量a”,我理解该错误,是否有任何解决方案使用流而不使用foreach或for循环?
答案 0 :(得分:2)
因为您没有将第二个流嵌套到第一个流,而是将其展平:
.flatMap(a -> a.getListB().stream())
因此,最后在此语句之后,您仅得到stream<B>
的{{1}}的所有元素中的List
。
要满足您的要求,请嵌套流并使用B
而不是forEach()
,因为在这里您不希望进行任何转换,但希望应用flatMap()
:
Consumer