Список из списка потоков JAVA8 - PullRequest
3 голосов
/ 21 июня 2019

Мне нужно пройти через список (класс A) из списков (класс B).Я хочу использовать потоки 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 loop?

1 Ответ

2 голосов
/ 21 июня 2019

Поскольку вы не вкладываете второй поток в первый, а выравниваете его:

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

Так, наконец, после этого утверждения вы получите просто stream<B> всех элементов List s.B.

Чтобы решить ваши требования, вложите поток и используйте forEach() вместо flatMap(), поскольку здесь вы не хотите ничего преобразовывать, но хотите применить Consumer:

Collection<A> listA = ...;

listA.stream()
    .filter(a -> a.getListaB() != null)
    .forEach(a -> a.getListB().stream()
               .forEach(b -> {
                    // a and b are usable now
                })
       );
...