java streamjava中stream跳出循环_Java8:⽤Stream来循环集合
正如我之前所写的,Java 8中的新功能特性改变了游戏规则。对Java开发者来说这是⼀个全新的世界,并且是时候去适应它了。
在这篇⽂章⾥,我们将会去了解传统循环的⼀些替代⽅案。在Java 8的新功能特性中,最棒的特性就是允许我们去表达我们想要完成什么⽽不是要怎样做。这正是循环的不⾜之处。要确保循环的灵活性是需要付出代价的。return、break 或者 continue都会显著地改变循环的实际表现。这迫使我们不仅要清楚我们要实现怎样的代码,还要了解循环是怎样⼯作的。
在介绍Java 8的流(Stream)时,我们学会了⼀些集合操作的实⽤技巧。现在我们要看看怎样把这些循环转换为更简洁,可读性更⾼的代码。
开始编码!
好吧,讲的够多了,是时候展⽰⼀些例⼦了!
这次我们要以⽂章为例⼦。⼀篇⽂章拥有⼀个标题,⼀个作者和⼏个标签。
每个例⼦都会包含⼀个使⽤传统循环的⽅案和⼀个使⽤Java 8新特性的⽅案。
在第⼀个例⼦⾥,我们要在集合中查包含“Java”标签的第⼀篇⽂章。
看⼀下使⽤for循环的解决⽅案。
现在我们使⽤Stream API的相关操作来解决这个问题。
是不是很酷?我们⾸先使⽤ filter 操作去到所有包含Java标签的⽂章,然后使⽤ findFirst() 操作去获取第⼀次出现的⽂章。因为Stream 是“延迟计算”(lazy)的并且filter返回⼀个流对象,所以这个⽅法仅在到第⼀个匹配元素时才会处理元素。
现在,让我们获取所有匹配的元素⽽不是仅获取第⼀个。
⾸先使⽤for循环⽅案。
使⽤Stream操作的⽅案。
在这个例⼦⾥我们使⽤ collection 操作在返回流上执⾏少量代码⽽不是⼿动声明⼀个集合并显式地添加匹配的⽂章到集合⾥。
到⽬前为⽌还不错。是时候举⼀些突出Stream API强⼤的例⼦了。
根据作者来把所有的⽂章分组。
照旧,我们使⽤循环⽅案。
我们能否到⼀个使⽤流操作的简洁⽅案来解决这个问题?
很好!使⽤ groupingBy 操作和 getAuthor ⽅法,我们得到了更简洁、可读性更⾼的代码。
现在,我们查集合中所有不同的标签。
我们从使⽤循环的例⼦开始。
好,我们来看看如何使⽤Stream操作来解决这个问题。
棒极了!flatmap 帮我把标签列表转为⼀个返回流,然后我们使⽤ collect 去创建⼀个集合作为返回值。
⼀切皆有可能
以上的就是如何使⽤可读性更⾼的代码代替循环的例⼦。务必仔细看看Stream API,因为这篇⽂章仅仅提到它的⼀些⽪⽑⽽已。
更新
收到solarfuse和dhruvgairola的评论后,更新了getDistinctTags()例⼦,使⽤集合(Set)作为返回集合。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论