【发布时间】:2016-11-29 14:18:11
【问题描述】:
快速提问: 如何像这样引用嵌套流的父元素:
jpegDir.stream()
.parallel()
.map(E -> createDimentionArray(E.getDescription(1), E.getDescription(3)))
.filter(E -> E != null)
.forEach(E -> images.stream()
.filter(J -> J.getType().contains(".jpg"))
.forEach(I -> I.setSize(E))
);
最后一个forEach 的父元素E 的类型为string。有没有办法让我在 setSize() 方法中引用 E ?
【问题讨论】:
-
这应该可以正常工作,你在
E的范围内调用setSize。 -
那么它一定是我的代码的其他部分返回了一个空值..
-
您可以将
.peek(System.out::println)调用添加到您的流中以打印出流中正在处理的值... -
请注意,用于返回
createDimentionArray(E.getDescription(1), E.getDescription(3))的E与提供给forEach的 lambda 参数不同的E。它的类型是createDimentionArray的返回类型。这可能是正常的,但是用相同的名字命名不同的东西会令人困惑。 -
你知道
images.stream() .filter(J -> J.getType().contains(".jpg"))的处理结果总是一样的吗?重复这不仅会浪费资源,而且对于通过过滤器的jpegDir的每个元素多次调用同一对象上的setSize似乎不是正确的事情。要么,这与意图相去甚远,要么变量和方法的命名方案有问题。
标签: java java-8 java-stream