zoukankan      html  css  js  c++  java
  • StreamAPI多次消费一个stream

    StreamAPI中的stream不能被重复消费,一旦它被使用,stream就被关闭了,别的地方再消费它就会抛IllegalStateException:stream has already been operated upon or closed。

    1. 比如下面的代码中,stream被消费了两次,第二次消费时将会抛异常:
    @Test
    public void statistics() {
        IntStream range = IntStream.range(0, 12);
    
        OptionalInt min = range.min();  //第一次消费正常
        System.out.println(min);
    
        long count = range.count();  //第二次消费将报错
        System.out.println(count);
    }
    
    1. 如何实在需要多次消费呢,通过Supplier来生产stream,每次调用supplier.get()获取一个崭新的stream对象,虽然对象是新的,但是每个stream中的数据是相同的,间接地实现了重复消费的语义:
    @Test
    public void statistics0() {
        Supplier<IntStream> supplier= () -> IntStream.range(0, 12);
    
        OptionalInt min = supplier.get().min();  //第一次消费正常
        System.out.println(min);
    
        long count = supplier.get().count();  //第二次消费正常
        System.out.println(count);
    }
    
  • 相关阅读:
    快速排序
    冒泡排序算法
    设计模式之工厂方法模式
    调用存储过程修改
    取出字符串中的回车空格
    调用存储过程实例
    C++左值
    cocos2d-x 不规则形状按钮的点击判定
    C/C++
    字符函数库 cctype
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/12549661.html
Copyright © 2011-2022 走看看