您好,登录后才能下订单哦!
本篇内容主要讲解“怎么使用Java Stream”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java Stream”吧!
如果你要用好Stream,你必须搞清楚它的特点。
虽然我们把Stream和以Collection为代表的集合框架类型放在一起对比,但它只是将数据源(Source)中的数据元素提取到数据操作管道,并按照定义好的规则(操作符)进行“流动”。另外Stream也绝不修改自己所封装的底层数据结构的数据。
Stream有点类似于水管网络。
无固定大小
水管网络中流动的水是没有固定大小的,甚至可以是无限的。Stream也是如此。
惰性化
Stream只有定义终止操作,比如collect(Collector)、forEach(Consumer),它才会开始执行。以下从流中筛选以h开头的字符串并不会执行。
Stream.of("hello","wolrd").filter(str-> str.startsWith("h"))
不变性
一个既定的Stream是不变的,所有的中间操作都会衍生一个新的Stream,即使中间操作不改变Stream中的任何元素。
一次性
一个Stream流只有一次终止操作。一旦完成了终止操作,这个流就关闭了。无法再次进行使用,简直就是一次性用品。
Stream<String> stringStream = Stream.of("1", "2"); // forEach 终止操作打印 1 2 流终止 stringStream.forEach(System.out::println); // 重复使用将抛出IllegalStateException异常 stream has already been operated upon or closed stringStream.filter(s -> s.equals("2")).forEach(System.out::println);
并行操作
Stream支持并行化(parallel)操作,不需要编写额外的多线程代码,所有的操作会自动并行进行。不过大多数情况下我们都是串行执行。
对于Stream和Collection我们该如何选择呢?首先Collection的绝大部分场景Stream都可以完成,甚至更好。
它们都提供了很多方法,如果你需要获取元素的个数,集合更加方便一些,如果你要过滤一些元素,很明显,Stream的API更加方便,甚至它提供了各种可组合的操作。
对于集合,一旦定义使用需要一次性的加载入内存,如果你打算在内存中重用这些数据,使用集合就非常合适;而Stream的惰性特点,在终端操作之前不会有任何的中间操作,这意味着不会上来就初始化数据到内存,可以降低初始化成本,甚至你可以调整其执行消费元素的速率。
如果最终的结果是可控的、有限的,它们两者都能够胜任;如果结果集非常庞大或者近似无限的,Stream将是不二之选。
Stream不会改变原始的数据,而Collection可以实现这一点。
是要数据容器还是数据管道。
当结果以Collection的形式返回时,我们可以重复使用。而一个Stream被使用后,就认为它已消耗掉,并在重用时抛出IllegalStateException,如上面所示。
Stream流的表现格式通常没有Java集合框架丰富,Java集合框架提供了如Set、List、Map等格式。如果你需要终端返回展现,显然集合框架更加合适。
在Spring MVC中,Stream的展现为数组。
到此,相信大家对“怎么使用Java Stream”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。