重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要讲解了如何使用Java8 Stream API,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
成都创新互联是一家集网站建设,镇远企业网站建设,镇远品牌网站建设,网站定制,镇远网站建设报价,网络营销,网络优化,镇远网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
1. 概述
Java 8 引入的一个重要的特性无疑是 Stream API。Stream 翻译过来是“流”,突然想到的是大数据处理有个流式计算的概念,数据通过管道经过一个个处理器(Handler)进行筛选,聚合,而且流都具有向量性,强调的是对数据的计算处理,而集合强调的是数据集。Stream可以看做是一个可操作的数据集序列,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。有点类似于数据库中的增删改查操作。十分高效而且易于使用。
从不同的数据源创建流有很多方式。 被创建的流并不能改变数据源。什么意思呢?打个比方,从一个集合创建流后,对流的操作并不会改变这个集合的数据状态。我们还是举个例子吧。
如上图, 我们将一个长度为3的集合放入一个流,过滤掉元素长度不超过4的元素,然后把剩下的迭代出来。同时我们还打印一下原始的数据源strArr
集合长度看看是否发生了变化。结果虽然从流中移除了java
这个元素但是strArr
却并没有变化。
接下来我们开始梳理一下创建流的方式。
你应该注意到上图中我用Collections
创建了一个空的List
,流也是一样,而且这两者的意义也是一样的。都是避免为没有元素而返回null
。
上面摘自java 8 CollectionCollection
的实现都可以创建流。
我们可以从数组来创建一个流,或者从数组中按照索引截取一部分创建流
Stream 提供建造者方法来构建流。不过请注意泛型约束,否则返回的是Object类型的流。
generate()
方法接收 Supplier
函数来生成元素,而且生成如果不加以限制将不会停止,直到内存限制。下面这个例子将生成长度为10,字符串元素长度为5的字符串流
创建无限流的另一种方法是使用iterate()
方法。和generate()
方法一样都要加以限制。不同的是 iterate()方法第一个参数作为起始的种子,第二个函数参数来定制生成元素的规则。下面这个例子是从1作为第一个元素,每个元素在上一个元素的基础上加1,限制长度为10。下面将打印1-10。
Java 8提供了从三种基本类型创建流的可能性:int,long和double。由于Stream IntStream
,LongStream
,DoubleStream
。
使用这些新的API避免了不必要的自动装箱,从而提高了生产率:
以上两个方法的起始都是从1开始,步长为1创建序列。区别就是endExclusive=3
range
方法不包含3,而rangeClosed
包括3。
从Java 8开始,Random
类为生成基本类型流提供了广泛的方法。例如,以下代码创建一个DoubleStream
,它有三个随机double
元素:
String也可以用作创建流的源。借助String类的chars()
方法。由于没有CharStream
,在JDK的IntStream
用于表示字符流代替。
以下示例根据指定的RegEx
将String
拆分为子字符串:
Java NIO类Files
允许通过lines()
方法生成文本文件的Stream
。文本的每一行都成为流的一个元素:
你还可以在lines()
方法中指定字符集编码。
并行流就是把一个内容分成多个数据块,并用不同的线程分成多个数据块,并用不同的线程分别处理每个数据块的流。底层用了Fork/Join框架。该流主要用来处理大批量的数据源。少量数据不建议使用。带有parallel的声明方式都是并行流,这里不在介绍。
但是使用一定要注意数据并行处理同步。要么使用同步集合,诸如Collections.synchronized
系列。或者在并行流收集元素到集合中时,调用collect
方法,一定不要采用Foreach
方法或者map
方法。
只要只调用中间操作,就可以实例化一个流并具有对它的可访问引用。执行终端操作会使流不可访问。从技术上讲,以下代码看上去是有效的:
第3行是终端操作 如果接着执行第4行对stream进行重用将触发IllegalStateException
。一定要谨记 Java 8 中同一个Stream 在终端操作后是不能重用的。 正确的做法是这样的:
中间操作就是对数据源中的数据的计算操作。其实上面我们已经对流进行很多的中间操作比如filter()
、limit()
等等。网上很著名的一些中间操作讲解
创建Stream 一个数据源(如:集合、数组),获取一个流中间操作 一个中间操作链,对数据源的数据进行处理终止操作(终端操作)一个终止操作,执行中间操作链,并产生结果,到此整个流消亡。
看完上述内容,是不是对如何使用Java8 Stream API有进一步的了解,如果还想学习更多内容,欢迎关注创新互联行业资讯频道。