保存成功
订阅成功
保存失败,请重试
提交成功

从底层重学 Java 之 Stream 分离器及 Sink

¥3.99会员免费看
草宝虫
5

从底层,从原理,我们来重学一次 Java。Stream 是 JDK 8 中新引入的,方便了数据列表的过滤、投影、遍历等各种处理,他的源码及实现是怎样的呢?

本系列秉承所有结论尽量从源码中来,没有源码的尽量标明出处。相关源码会附着在文章中,读本文即可,不用再自行查找源码及资料学习,方便大家充分利用路上的碎片时间。

分离器(Spliterator)用于遍历和切分集合元素,终端操作遍历直接就是调用分离器的遍历方法,并行处理是用分离器进行并行任务切分的。例如:Arrays.stream内部返回的 StreamSupport.stream(spliterator(array, startInclusive, endExclusive), false),第一个参数就是分离器(Spliterator)。

Sink 是在 Stream 的终端操作(如 forEach)进行处理时,AbstractPipeline.wrapSink 方法向上遍历管道阶段时,中间管道阶段 opWrapSink 方法实现返回的接口。过滤(filter)、投影(map)、排序(sorted)等中间操作的核心代码均写在 Sink 的接口实现中,可见Sink的重要性。

本篇 Chat 分析了分离器(Spliterator)相关源码,以及 Sink 源码,帮助大家深入理解和学习 JDK 源码。

本文包含以下内容:

  • Spliterators
    • spliterator(Collection c, int characteristics)
    • Objects.requireNonNull(T obj)
    • Spliterators.spliteratorUnknownSize(Iterator iterator, int characteristics)
  • IteratorSpliterator
    • 类定义
    • 常量
    • 构造函数
      • IteratorSpliterator(Collection collection, int characteristics)
      • IteratorSpliterator(Iterator iterator, long size, int characteristics)
      • IteratorSpliterator(Iterator iterator, int characteristics)
  • Spliterator
    • 类的定义
    • 方法
      • tryAdvance(Consumer action)
      • forEachRemaining(Consumer action)
      • trySplit()
      • estimateSize()
      • getExactSizeIfKnown()
      • characteristics()
      • hasCharacteristics(int characteristics)
      • getComparator()
    • 常量
      • ORDERED
      • DISTINCT
      • SORTED
      • SIZED
      • NONNULL
      • IMMUTABLE
      • CONCURRENT
      • SUBSIZED
  • Spliterator.OfPrimitive
  • Spliterator.OfInt
  • Spliterator.OfLong
  • Spliterator.OfDouble
  • Tripwire
    • 类的定义
    • ENABLED
    • trip(Class<?> trippingClass, String msg)
  • ArraySpliterator
    • 属性
    • 构造函数
    • trySplit
    • forEachRemaining
    • tryAdvance
    • estimateSize
    • characteristics
    • getComparator
  • Sink
    • 接口定义
    • 接口继承结构
    • begin(long size)
    • end()
    • cancellationRequested()
    • accept(int value)
    • accept(long value)
    • accept(double value)
    • OfInt
    • OfLong
    • OfDouble
    • ChainedReference
    • ChainedInt
    • ChainedLong
    • ChainedDouble

适用人群:有一些 Java 基础的人群。

104 人已订阅
会员免费看
¥3.99 原价订阅
关注提示×
扫码关注公众号,获得 Chat 最新进展通知!
入群与作者交流×
扫码后回复关键字 入群
Chat·作者交流群
入群码
该二维码永久有效
严选标准
知道了
Chat 状态详情
开始预订
预订结果公布20.11.20

预订达标,作者开始写作

审核未达标,本场 Chat 终止

作者文章审核结果公布20.12.03

审核达标,文章发布

审核未达标,本场 Chat 终止

Chat 完结
×
已购列表