Stream接口

继承关系

  • 继承 BaseStream<T, Stream<T>>,BaseStream 继承 AutoCloseable

文档说明

  • 流是一个元素的序列,支持串行与并行的聚合操作
  • 除了对象引用流的 Stream,还有一些原生特化的版本:IntStream、LongStream、DoubleStream;这些特化版本也被称作流,并且保留着流本身具有的特性及限制

    • 目的:减少装箱拆箱操作
    • 继承关系:
      • 均与 Stream 一样,继承 BaseStream<T, Stream<T>>,只是泛型变成了指定类型。所以,4种流是平行关系,并非继承关系
  • 要想执行操作,流操作会被组合到一个流管道(Pipeline)中
  • 一个流管道包含
    • 一个源,可以是一个 array,或 collection,或 generator function(生成器),或 I/O 通道
    • 零个或多个中间操作(会将一个流转换成另外一个流)
    • 终止操作(会生成一个结果)
  • 流是延迟的,对于源数据的计算,只有在终止操作被触发时,对源的计算才真正开始执行;源里面的数据只有在需要时才被消费
  • 集合与流,虽然具有一定的相似性,但实现目标是不同的
    • 集合主要关注其元素的高效管理与访问
    • 与之相反,流并没有提供直接访问或操作当中元素的方式,相反,它关注的是如何声明式地描述其源,以及以聚合的方式在源上执行的计算操作
    • 然而,如果所提供的流操作没有提供我们所期望的功能,那么还可以利用 iterator() 或 spliterator() 操作执行可控制的遍历
  • 一个流管道,可以被看作是对源的一种查询
    • 除非这个流被设计成可以并发式地修改(如 ConcurrentHashMap),否则会出现意料之外的错误情况(如:一个线程修改,另一个线程查询)
  • 大多数的流操作会接收用户指定的行为作为参数(如放一个lambda表达式进去),为了保证得到正确的结果,这些行为的参数都必须满足下述条件
    • 必须式非干扰的(它们不操作数据源)
    • 大多数情况必须是无状态的(结果不依赖于任何在流管道操作中可能改变的状态)
  • 一个流只能被操作一次(调用中间操作或终止操作)
  • 流实现了 AutoCloseable,有一个 close() 方法
    • 绝大多数情况下,流不需要关闭
    • 只有当源为 I/O 通道时才需要关闭,此时,可以将资源声明在 try-with-resources 语句中

  • 流管道可以以串行或并行的方式执行,这只是流的一个属性,流会根据初始化选项进行创建

猜你喜欢

转载自www.cnblogs.com/flying-snake/p/11520562.html