• 【Stream】


    1、stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果;
    2、stream不会改变数据源,通常情况下会产生一个新的集合
    3、stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行;
    4、对stream操作分为终端操作和中间操作
    终端操作:会消费流,这种操作会产生一个结果的,如果一个流被消费过了,那它就不能被重用的。
    中间操作:中间操作会产生另一个流。因此中间操作可以用来创建执行一系列动作的管道。一个特别需要注意的点是:中间操作不是立即发生的。相反,当在中间操作创建的新流上执行完终端操作后,中间操作指定的操作才会发生。所以中间操作是延迟发生的,中间操作的延迟行为主要是让流API能够更加高效地执行。
    5、stream不可复用,对一个已经进行过终端操作的流再次调用,会抛出异常。

    Stream操作分类


    Stream的操作可以分为两大类:中间操作、终结操作

    中间操作可分为:

    无状态(Stateless)操作:指元素的处理不受之前元素的影响
    有状态(Stateful)操作:指该操作只有拿到所有元素之后才能继续下去


    终结操作可分为:

    短路(Short-circuiting)操作:指遇到某些符合条件的元素就可以得到最终结果
    非短路(Unshort-circuiting)操作:指必须处理完所有元素才能得到最终结果

    流的创建

    • 通过 java.util.Collection.stream() 方法用集合创建流
    1. List<String> list = Arrays.asList("hello","world","stream");
    2. //创建顺序流
    3. Stream<String> stream = list.stream();
    4. //创建并行流
    5. Stream<String> parallelStream = list.parallelStream();
    • 使用java.util.Arrays.stream(T[] array)方法用数组创建流
    1. String[] array = {"h", "e", "l", "l", "o"};
    2. Stream<String> arrayStream = Arrays.stream(array);
    • Stream的静态方法:of()、iterate()、generate()
    1. Stream<Integer> stream1 = Stream.of(1, 2, 3, 4, 5, 6);
    2. Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 2).limit(3);
    3. stream2.forEach(System.out::println);
    4. Stream<Double> stream3 = Stream.generate(Math::random).limit(3);
    5. stream3.forEach(System.out::println)
    6. //输出结果如下:
    7. 0
    8. 2
    9. 4
    10. 0.9620319103852426
    11. 0.8303672905658537
    12. 0.09203215202737569

  • 相关阅读:
    Pytorch与CUDA对应关系
    DCMM数据能力成熟度评估模型--学习笔记(1)
    分布式架构服务调用
    docker、docker-compose部署oracle,plsql连接远程oracle
    javaweb-web服务器
    linux网络编程之socket,bind,listen,connect,accept
    (附源码)springboot工单管理系统 毕业设计 964158
    【死磕JVM】JVM快速入门之前戏篇
    Android EditText输入限制及字符编码
    CDQ分治+树状数组,LOJ6270. 数据结构板子题
  • 原文地址:https://blog.csdn.net/chengchencheng/article/details/126414739