JDK9今年就要发布了,而JDK8估计还有好多人没用过,最近几篇就简单介绍下JDK8的一些比较有趣的用法。而本篇文章会初步介绍一下JDK8中的Stream也就是流的使用。
为什么需要 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 是一个函数式语言+多核时代综合影响的产物。同时,理论上流的数据源可以是无限大的。
从以上介绍上(摘抄自网上= =||)可以看出:
1、JDK8中的Stream的数据源来自集合,Stream是对集合进行操作的;
2、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。