美文网首页
jdk8流的操作机制

jdk8流的操作机制

作者: 三不猴子 | 来源:发表于2018-08-05 16:43 被阅读9次
  1. 所有操作是链式调用, 一个元素只迭代一次

  2. 每一个中间操作返回一个新的流. 流里面有一个属性sourceStage, 指向同一个 地方,就是Head

  3. Head->nextStage->nextStage->... -> null

  4. 有状态操作会把无状态操作阶段,单独处理

  5. 并行环境下, 有状态的中间操作不一定能并行操作.

  6. parallel/ sequetial 这2个操作也是中间操作(也是返回stream),但是他们不创建流, 他们只修改 Head的并行标志

import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;

/**
 * 验证stream运行机制
 * 
 * 1. 所有操作是链式调用, 一个元素只迭代一次 
 * 2. 每一个中间操作返回一个新的流. 流里面有一个属性sourceStage 
 *     指向同一个 地方,就是Head 
 * 3. Head->nextStage->nextStage->... -> null
 * 4. 有状态操作会把无状态操作阶段,单独处理
 * 5. 并行环境下, 有状态的中间操作不一定能并行操作.
 * 
 * 6. parallel/ sequetial 这2个操作也是中间操作(也是返回stream)
 *      但是他们不创建流, 他们只修改 Head的并行标志
 * 
 * 
 *
 */
public class RunStream {

    public static void main(String[] args) {
        Random random = new Random();
        // 随机产生数据
        Stream<Integer> stream = Stream.generate(() -> random.nextInt())
                // 产生500个 ( 无限流需要短路操作. )
                .limit(500)
                // 第1个无状态操作
                .peek(s -> print("peek: " + s))
                // 第2个无状态操作
                .filter(s -> {
                    print("filter: " + s);
                    return s > 1000000;
                })
                // 有状态操作
                .sorted((i1, i2) -> {
                    print("排序: " + i1 + ", " + i2);
                    return i1.compareTo(i2);
                })
                // 又一个无状态操作
                .peek(s -> {
                    print("peek2: " + s);
                }).parallel();

        // 终止操作
        stream.count();
    }

    /**
     * 打印日志并sleep 5 毫秒
     * 
     * @param s
     */
    public static void print(String s) {
        // System.out.println(s);
        // 带线程名(测试并行情况)
        System.out.println(Thread.currentThread().getName() + " > " + s);
        try {
            TimeUnit.MILLISECONDS.sleep(5);
        } catch (InterruptedException e) {
        }
    }

}

相关文章

  • jdk8流的操作机制

    所有操作是链式调用, 一个元素只迭代一次 每一个中间操作返回一个新的流. 流里面有一个属性sourceStage,...

  • jdk8 流操作

    stream操作 list排序 list 按指定条数分割

  • Guli的技术点

    jdk8的新特性有那些: 项目使用到的stream流操作 常用方法以及示例:https://www.jianshu...

  • python: flush

    flush 简介 来自 【python】对文件操作flush的一个理解 的简介: 一般的文件流操作都包含缓冲机制...

  • python 文件,文件夹操作全面解析

    操作文件 mode的说明image.png 读写文件 打开多个文件 flush方法 一般的文件流操作都包含缓冲机制...

  • Stream流的使用

    Stream流的使用 本篇主要讲解JDK8中 Stream流的使用, 包括如何 筛选 、切片、映射 、查找、匹配 ...

  • 第4章 Java并发包中原子操作类原理剖析

    目录 原子变量操作类递增和递减操作代码compareAndSet方法AtomicLong使用示例 JDK8中新增的...

  • Java中如何实现序列化,有什么意义?

    序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流...

  • 【原创】Node核心API(一)Buffer

    在引入TypedArray之前,JavaScript并没有读取或者操作流或二进制数据数据的机制。而Buffer正是...

  • Node中的缓冲区(Buffer)

    Buffer初识 在引入TypedArray 之前,JavaScript 语言没有用于读取或操作二进制数据流的机制...

网友评论

      本文标题:jdk8流的操作机制

      本文链接:https://www.haomeiwen.com/subject/ptibvftx.html