JDK9今年就要发布了,而JDK8估计还有好多人没用过,最近几篇就简单介绍下JDK8的一些比较有趣的用法。而本篇文章会初步介绍一下JDK8中的Stream也就是流的使用。java
为何须要 Stream
Stream 做为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是彻底不一样的概念。它也不一样于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的加强,它专一于对集合对象进行各类很是便利、高效的聚合操做(aggregate operation),或者大批量数据操做 (bulk data operation)。Stream API 借助于一样新出现的 Lambda 表达式,极大的提升编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操做,并发模式可以充分利用多核处理器的优点,使用 fork/join 并行方式来拆分任务和加速处理过程。一般编写并行代码很难并且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就能够很方便地写出高性能的并发程序。因此说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。同时,理论上流的数据源能够是无限大的。数据库
从以上介绍上(摘抄自网上= =||)能够看出:编程
一、JDK8中的Stream的数据源来自集合,Stream是对集合进行操做的;微信
二、Stream无须显示的编写多线程代码就可实现并行(利用fork/join框架)。多线程
下面就开始用代码简单展现下Stream的用法(主要与传统写法对比)。并发
遍历集合
框架
遍历集合是对集合最多见的操做了函数
首先是传统写法:性能
而后是Stream写法:大数据
集合的遍历看起来彷佛并无什么太大区别,都是三行,下面换一个复杂的场景
求最大值(集合中都是int类型的值)
传统写法:
Stream写法:
此时Stream的优点就显而易见了,首先是代码的缩减,最主要的是语义上比第一个要清晰多了(至少我这么认为O(∩_∩)O哈哈哈~)
数据过滤:
数据过滤也是经常使用的操做之一,下面经过过滤集合中大于10的数来比较一下传统写法和Stream写法的差异。
传统写法:
Stream写法:
数据转换
数据的转换也是很常见的对集合的操做,下面示范一下将集合中的字符串转成数字的操做(集合中的字符串都是数字)。
首先是传统操做:
Stream操做:
能够看出这个操做也是很简洁的。
除了以上几种操做外流还能完成许多事情(许多数据库的操做流也均可以完成),各位本身能够尝试一下。另外须要注意的是,默认流是串行操做的,除非本身指定须要并行操做。
获取流的途径:
Collection.stream()-->串行流
Collection.parallelStream()-->并行流
Arrays.stream(T array) or Stream.of()-->串行流
java.util.stream.IntStream.range()-->串行流
.......
除了以上列出的几种外还有其余的方式,不过经常使用的就这几种了,能知足平常大部分需求了。
JDK8中Stream的使用就简单介绍到此,各位下去能够本身尝试着使用一下,当你习惯后相信你会爱上这种写法的,真心好使~~
若是对文章内容有任何疑问请加QQ1213812243。
本文分享自微信公众号 - java初学者(JoeKerouac_public)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。