java8新特新:接口流-Stream()接口和所有方法(map,foreach,filter,count,distinct,limit,collect,skip,sorted)

Steam<T> 

接口流

  • 类型参数:
    T  - 流元素的类型
    所有超级接口:
    AutoCloseable BaseStream  <T, Stream  <T >>


    公共接口Stream <T> 
    扩展BaseStream <T,Stream <T >>
    支持顺序和并行聚合操作的一系列元素。以下示例说明使用 Stream and 的聚合操作  IntStream
    
         int sum = widgets.stream()
                          .filter(w -> w.getColor() == RED)
                          .mapToInt(w -> w.getWeight())
                          .sum();
     
    在这个例子中, widgets 是一个 Collection<Widget> 我们通过创建一个 Widget 对象 Collection.stream() ,对其进行过滤以产生只包含红色小部件的流,然后将其转换为 int 代表每个红色小部件权重的值然后将这个流加起来产生总重量。

    除了Stream,这是对象引用的流,存在用于原始特IntStreamLongStream以及DoubleStream,所有这些都称为“流”和符合此处描述的特征和限制。

    为了执行计算,流 操作被组成 流管道一个流管道由一个源(可能是一个数组,一个集合,一个生成器函数,一个I / O通道等),零个或多个中间操作(将流转换成另一个流等filter(Predicate)) 终端操作(产生结果或副作用,如count()or forEach(Consumer))。流是懒惰的; 源数据的计算仅在终端操作启动时执行,而源元素仅在需要时消耗。

    收藏和流媒体虽然有一些肤浅的相似之处,却有着不同的目标。收藏主要关心对元素的有效管理和访问。相比之下,流不提供直接访问或操作元素的手段,而是关注于声明性地描述它们的来源以及将在该来源上进行的计算操作。然而,如果提供的流的操作不提供所期望的功能性,BaseStream.iterator()并且BaseStream.spliterator()操作可用于执行受控的遍历。

    流管道,就像上面的“小部件”示例一样,可以被视为流源上的查询除非源代码被明确设计用于并发修改(如a ConcurrentHashMap),否则在查询流源时修改流源可能会导致不可预知或错误的行为。

    大多数流操作接受描述用户指定行为的参数,例如上例中w -> w.getWeight()传递给 的lambda表达式mapToInt为了保持正确的行为,这些行为参数

    • 必须是无干扰的 (他们不会修改流源); 
    • 在大多数情况下,它们必须是无状态的 (它们的结果不应该依赖于在流管道执行期间可能会改变的任何状态)。

    这样的参数总是一个实例 功能接口Function,也常常lambda表达式或方法的引用。除非另有规定,否则这些参数必须 是非空的

    应该只对一个数据流进行操作(调用中间或终端流操作)一次。这排除了例如“分叉”流,其中相同的源馈送两个或更多个管线,或者多个遍历相同的流。如果流IllegalStateException 检测到流正在被重用,可能会抛出流。然而,由于一些流操作可能返回它们的接收者而不是新的流对象,所以在所有情况下可能无法检测到重用。

    流有一个BaseStream.close()方法和实现AutoCloseable,但几乎所有的流实例实际上并不需要在使用后关闭。一般来说,只有来源是IO通道的流(例如返回的流Files.lines(Path, Charset))需要关闭。大多数流都由集合,数组或者生成函数来支持,而不需要特殊的资源管理。(如果流确实需要关闭,则可以在try-with-resources语句中将其声明为资源。)

    流管线可以按顺序或并行执行 这个执行模式是流的一个属性。流是通过顺序或并行执行的初始选择创建的。(例如, Collection.stream()创建一个顺序流,并Collection.parallelStream()创建一个并行。)执行模式的这种选择可以由BaseStream.sequential()or BaseStream.parallel()方法修改 ,并且可以用该BaseStream.isParallel()方法查询

    以来:
    1.8
    也可以看看:
    IntStream ,  LongStream ,  DoubleStream ,  java.util.stream
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值