Java 8 无法创建对stream&;的引用;它’;不可能多次重复使用同一个流

Java 8 无法创建对stream&;的引用;它’;不可能多次重复使用同一个流,java-8,java-stream,Java 8,Java Stream,阅读关于Java8流的文章,发现 Java流是可消费的,因此无法创建引用 以供将来使用。因为数据是按需提供的,所以不是 可以多次重复使用同一个流 同时在同一篇文章中 //sequential stream Stream<Integer> sequentialStream = myList.stream(); //parallel stream Stream<Integer> parallelStream = myList.parallelStream(); //顺序流

阅读关于Java8流的文章,发现

Java流是可消费的,因此无法创建引用 以供将来使用。因为数据是按需提供的,所以不是 可以多次重复使用同一个流

同时在同一篇文章中

//sequential stream
Stream<Integer> sequentialStream = myList.stream();

//parallel stream
Stream<Integer> parallelStream = myList.parallelStream();
//顺序流
Stream sequentialStream=myList.Stream();
//平行流
Stream parallelStream=myList.parallelStream();
“无法创建对流的引用以供将来使用”的含义是什么?
sequentialStream
parallelStream
不是对流的引用吗


“不可能多次重复使用同一个流”是什么意思?

它的意思是每次需要对一个流进行操作时,都必须创建一个新的流

因此,例如,您不能有如下内容:

Class Person {
    private Stream<String> phoneNumbers;

    Stream<String> getPhoneNumbers() {
        return phoneNumbers;
    }
}
班级人员{
专用流电话号码;
流getPhoneNumber(){
返回电话号码;
}
}
只要在你喜欢的时候重用这一条流就行了。相反,你必须有类似的东西

Class Person {
    private List<String> phoneNumbers;

    Stream<String> getPhoneNumbers() {
        return phoneNumbers.stream();  // make a NEW stream over the same data
    }
}
班级人员{
私人电话号码列表;
流getPhoneNumber(){
返回phoneNumbers.stream();//在同一数据上创建新流
}
}

你包含的代码就是这么做的。它在同一数据上生成两个不同的流

文章错误地说,没有办法为将来的使用创建对流的引用:您可以创建一个供将来使用的引用。你问题中的变量就是例子。例如,这些引用可以传递给异步使用者,因此在将来会被很好地使用。即使在方法的后面几行对流变量进行操作仍然是“将来的用法”,因为它发生在获得引用之后的某个时间。重要的短语是最后一个短语“不可能多次重用同一个流”。在这个前提下阅读其余部分。