Могу ли я получить доступ к значению предыдущей лямбды в цепочке потоков?

У меня есть этот код потока, который не компилируется:

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);
Другие вопросы по тегам