概述
stream简介
stream是一个java.util.stream.Stream对象。各种集合类都添加了创建stream的方法,如list.stream(), list.parallelStream()。串行流可以转换为并行流,stream.parallel()。Stream接口也包含了各种创建stream的静态方法。
wordlist.stream().filter(w -> w.length() > 10).count();
stream的特点
- stream自己不会存储元素,stream实际存的是操作。
- stream操作不会改变源对象,而是返回一个新的stream。
- stream可能延迟执行,比如只想要前5个结果,则会获取5个结果后停止过滤。
stream的使用步骤
- 创建stream
- 中间操作,把一个stream转换为另一个stream
- 终止操作,强制之前的延迟操作立即执行,在此之后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());
最后
以上就是标致衬衫为你收集整理的《写给大忙人看的java SE8》笔记 -- 2. Stream的全部内容,希望文章能够帮你解决《写给大忙人看的java SE8》笔记 -- 2. Stream所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复