我可以在流链中访问先前lambda的值吗?

时间:2015-12-09 11:29:57

标签: java lambda java-stream

我有这个不编译的流代码:

itemList.stream()
    .map(im -> item2dogsMap.get(im.getEan()))
    .flatMap(List<Dog>::stream)
    .forEach(d -> System.out.println("item" + im + " with dog " + d));

问题在于forEach声明我需要imd。但它无法解决此问题im

我可以使用这两个值创建一个ItemAndDog类,并在map语句中执行一个新操作。但这看起来对我来说太过分了。有没有办法在不增加额外课程的情况下做到这一点?

2 个答案:

答案 0 :(得分:5)

您可以解决在flatMap内创建结果字符串的问题,您可以访问这两个变量:

itemList.stream()
    .flatMap(im -> item2dogsMap.get(im.getEan()).stream()
        .map(d -> "item" + im + " with dog " + d))
    .forEach(System.out::println);

答案 1 :(得分:3)

你做不到。 如果将lambda转换为无穷大的内部类,您将看到,您想要使用的变量超出范围。