Java-8-Stream-流的重用
目录
Java 8 Stream 流的重用
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