列表流JAVA8中的列表

时间:2019-06-21 20:01:20

标签: list java-8 java-stream

我需要从列表(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循环?

1 个答案:

答案 0 :(得分:2)

因为您没有将第二个流嵌套到第一个流,而是将其展平:

.flatMap(a -> a.getListB().stream())

因此,最后在此语句之后,您仅得到stream<B>的{​​{1}}的所有元素中的List

要满足您的要求,请嵌套流并使用B而不是forEach(),因为在这里您不希望进行任何转换,但希望应用flatMap()

Consumer