目录

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