Могу ли я получить доступ к значению предыдущей лямбды в цепочке потоков?
У меня есть этот код потока, который не компилируется:
itemList.stream()
.map(im -> item2dogsMap.get(im.getEan()))
.flatMap(List<Dog>::stream)
.forEach(d -> System.out.println("item" + im + " with dog " + d));
Проблема в том, что в forEach
заявление мне нужно im
а также d
, Но это не может решить im
Вот.
Я мог бы создать ItemAndDog
класс, принимающий два значения и сделать новое в map
заявление. Но это выглядит излишним для меня. Есть ли способ сделать это без создания дополнительного класса?
2 ответа
Решение
Ты не можешь. Если вы преобразуете свои лямбды в анонимные внутренние классы, вы увидите, что переменные, которые вы хотели использовать, находятся вне области видимости.
Вы можете решить проблему, создав результирующую строку внутри flatMap
где вы будете иметь доступ к обеим переменным, как это:
itemList.stream()
.flatMap(im -> item2dogsMap.get(im.getEan()).stream()
.map(d -> "item" + im + " with dog " + d))
.forEach(System.out::println);