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*

    原文作者:SUDDEV
    原文地址: https://blog.csdn.net/suddev/article/details/79380818
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞