为什么我必须在 Java 中链接流操作?
我认为我研究过的所有资源都强调,一个流只能消耗一次,而消耗是通过所谓的终端操作完成的(这对我来说很清楚)。
只是出于好奇,我尝试了这个:
import java.util.stream.IntStream;
class App {
public static void main(String[] args) {
IntStream is = IntStream.of(1, 2, 3, 4);
is.map(i -> i + 1);
int sum = is.sum();
}
}
这最终会引发运行时异常:
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)
at java.util.stream.IntPipeline.reduce(IntPipeline.java:456)
at java.util.stream.IntPipeline.sum(IntPipeline.java:414)
at App.main(scratch.java:10)
这是通常的,我错过了一些东西,但仍然想问:据我所知,这是一个中间(和懒惰)操作,并且本身对Stream没有任何作用。仅当调用终端操作(这是预先操作)时,流才会被消耗并操作。map
sum
但是为什么我必须将它们链接起来呢?
两者之间有什么区别
is.map(i -> i + 1);
is.sum();
和
is.map(i -> i + 1).sum();
?