Java 8 Stream 流已被操作或关闭(stream has already been operated upon or closed),在Java 8中,Stream不能重复使用,一旦被使用,流将被关闭。那有些时候我们需要重复使用流该怎么办呢?
我们可以巧用java 8的Suppliers接口
Supplier接口产生一个给定类型的结果。与Function不同的是,Supplier没有输入参数。
package test;
import java.util.function.Supplier;
import java.util.stream.Stream;
/** * Java 8 Stream 流的重用 * * @author suddev * @create 2018-02-26 下午4:31 **/
public class StreamMulltiUse {
public static void main(String[] args) {
String[] array = {"1","2","3","4","5","6","7"};
Supplier<Stream<String>> streamSupplier = () -> Stream.of(array);
//get一个新的stream
streamSupplier.get().forEach(System.out::println);
//再次get一个新的stream
streamSupplier.get().forEach(System.out::println);
}
}
OutPut
1
2
3
4
5
6
7 ----
1
2
3
4
5
6
7
可见每一次get都会返回一个新的流。
*需要注意点是这里并不是正真的把stream使用了两次,而是调用了Supplier的get方法,比如本例中相当于重新执行了Stream.of(array),重新获得了一个stream*