Java-Stream重用流

Java Stream在使用后通常只能操作一次,再次使用会抛出'已操作或关闭'的异常。本文介绍了两种解决方案:一是通过实现Supplier接口来重用流;二是介绍另一种方法以实现Stream的重复利用。

** 1. 一个 Stream 只可以使用一次**
多次使用就会报错:stream has already been operated upon or closed,流已经被操作或关闭
** 2. 解决方法一**
利用Supplier接口重用流

package day12.prepareLesson.c_Stream;

import java.sql.SQLOutput;
import java.util.function.Supplier;
import java.util.stream.Stream;

public class StreamFilter03 {
    public static void main(String[] args) {
        String[] arr = {"张无忌", "张三丰", "周芷若","张哈哈","张明"};
        
        //重用流
        Supplier<Stream<String>> supplier = ()->Stream.of(arr);
        /*
        使用过程中用Supplier接口的get方法获取对应的Stream对象【supplier.get()】,并对对象操作。
        */
        //第一次使用流
        supplier.get().forEach(x-> System.out.println(x));
		
		 //第二次使用流
        long count = supplier.get().filter(x->"张明".equals(x)).count();
        System.out.println("count = " + count);

		//第三次使用流
        Stream<String> res3 = supplier.get().limit(3);
        System.out.println("res3 = " + res3.count());

    }
}

3. 解决方法二


package day12.prepareLesson.c_Stream;

import java.sql.SQLOutput;
import java.util.function.Supplier;
import java.util.stream.Stream;

public class StreamFilter03 {
    public static void main(String[] args) {
        String[] arr = {"张无忌", "张三丰", "周芷若","张哈哈","张明"};
        //第一次获取流对象
        Stream<String> original = Stream.of(arr);
        Stream<String> res = original.filter((String str)->{
            return str.startsWith("张");
        });
        System.out.println(res.count());
        
        //第二次获取流对象
        Stream<String> original2 = Stream.of(arr);
        //获取前几个元素,limit(long l);
        Stream<String> res2 = original2 .limit(2);
        System.out.println(res2.count())

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值