总结一下关于在Java8中使用stream流踩过的一些坑
第一个坑:
Collectors.toAsList()其实是new了一个list,在向里面赋值。

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

解决办法:

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

解决办法:把stream改成for循环。
第三个坑:
并行流(parallelStream() )的foreach操作里,如果把一个ArrayList里的值copy到另外一ArrayList时,就有可能多或者少元素。原因并行流是多线程,而ArrayList是非线程安全的。
写在最后关于java8的stream是非常好用的,主要写的代码更加简洁,不在写大量代码。但是也不是所有场景都适合用的,如果本来业务耗时比较长,然后有希望减少业务执行时间。在数据量不是很大的情况下,stream流是没有优势的,也就是说数据量小,且同意业务内多处使用stream处理数据,这时执行耗时比for循环更多,只有业务量达到百万级别才体现出优势。
到此这篇关于总结一下关于在Java8中使用stream流踩过的一些坑的文章就介绍到这了,更多相关Java8的stream流内容请搜索好吧啦网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好吧啦网!
相关文章:
1. docker /var/lib/docker/aufs/mnt 目录清理方法2. python+excel接口自动化获取token并作为请求参数进行传参操作3. Vuex localStorage的具体使用4. vue - props 声明数组和对象操作5. ASP.NET泛型三之使用协变和逆变实现类型转换6. phpstorm恢复删除文件的方法7. Notepad++如何安装Python插件?Notepad++插件怎么装?8. python tkinter实现下载进度条及抖音视频去水印原理9. Python matplotlib画图时图例说明(legend)放到图像外侧详解10. Web应用开发中的几个问题——使用javascript开发需知

网公网安备