我有这个不编译的流代码:
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
语句中执行一个新操作。但这看起来对我来说太过分了。有没有办法在不增加额外课程的情况下做到这一点?
答案 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转换为无穷大的内部类,您将看到,您想要使用的变量超出范围。