温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

在Java8中使用stream流会碰到哪些问题

发布时间:2021-06-24 10:58:59 来源:亿速云 阅读:236 作者:chen 栏目:开发技术

这篇文章主要讲解了“在Java8中使用stream流会碰到哪些问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在Java8中使用stream流会碰到哪些问题”吧!

Java8的stream流

第一个坑:

Collectors.toAsList()其实是new了一个list,在向里面赋值。

在Java8中使用stream流会碰到哪些问题

注意这里Collectors.toList()的写法,这里其实是底层new ArraryList().筛选的数据放到一个新的list。虽然标1处和标2处是同一个变量,但是内存地址是不一样啊。下面的逻辑时把hldrPolVOList中的某些元素删除。但是这个方法执行完后其实是没有删除里面元素的。原因就是这里的new ArraryList()更改了内存地址造成的。

测试:

在Java8中使用stream流会碰到哪些问题

解决办法:

在Java8中使用stream流会碰到哪些问题

第二个坑:

list.stream().foreach(p->{return;});这里的return是结束的foreach而不是外部方法

在Java8中使用stream流会碰到哪些问题

解决办法:把stream改成for循环。

第三个坑:

并行流(parallelStream() )的foreach操作里,如果把一个ArrayList里的值copy到另外一ArrayList时,就有可能多或者少元素。原因并行流是多线程,而ArrayList是非线程安全的。

写在最后

关于java8的stream是非常好用的,主要写的代码更加简洁,不在写大量代码。但是也不是所有场景都适合用的,如果本来业务耗时比较长,然后有希望减少业务执行时间。在数据量不是很大的情况下,stream流是没有优势的,也就是说数据量小,且同意业务内多处使用stream处理数据,这时执行耗时比for循环更多,只有业务量达到百万级别才体现出优势。

感谢各位的阅读,以上就是“在Java8中使用stream流会碰到哪些问题”的内容了,经过本文的学习后,相信大家对在Java8中使用stream流会碰到哪些问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI