《写给大忙人看的java SE8》笔记 -- 2. Stream

stream简介

stream是一个java.util.stream.Stream对象。各种集合类都添加了创建stream的方法,如list.stream(), list.parallelStream()。串行流可以转换为并行流,stream.parallel()。Stream接口也包含了各种创建stream的静态方法。

wordlist.stream().filter(w -> w.length() > 10).count();

stream的特点

  1. stream自己不会存储元素,stream实际存的是操作。
  2. stream操作不会改变源对象,而是返回一个新的stream。
  3. stream可能延迟执行,比如只想要前5个结果,则会获取5个结果后停止过滤。

stream的使用步骤

  1. 创建stream
  2. 中间操作,把一个stream转换为另一个stream
  3. 终止操作,强制之前的延迟操作立即执行,在此之后stream就结束了。

大部分stream转换是无状态的,但是distinct等操作需要记住所有已读取的元素。peek操作,类似于linux的tee命令,返回一个同样的流,并且多了一份输出,方便调试。终止操作包括min, max, count, findFirst, reduce等聚合操作,或者itertor返回普通迭代器,或者toArray, collect等可以返回普通集合的操作。

原始类型流IntStream, LongStream, DoubleStream的summaryStatistics()方法可以返回均值、个数等统计指标。

考虑stream为空时,max的返回值是什么?答案为Optional对象。

Optional值

java.util.Optional可以存储一个对象或者null。可以在为空时返回默认值(orElse方法)。对于常见的调用s.f().g(),其中f返回T类型,g返回U类型;如果f()返回的是Optional<T>而不是T,需要改成s.f().flatMap(T::g),返回一个Optional<U>对象。

reduce操作与Collector

Stream.reduce(Integer::sum)可以用来求和。Stream.collect(Collector)可以收集结果,这里的“收集”可以包括求和、reduce、groupBy、partitionBy、join等复杂操作。Collectors类提供了各种现成的Collector,比如List<String> list = stream.collect(Collectors.toList());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值