关于JDK1.8新特性中List.stream().filter()的坑点

1. 前言

之前原来的程序因为被同事新加了功能有些改动,结果测试告诉我原来的功能出现了Bug,找半天没找出来,后来发现问题出现在了stream.filter中

2. 坑点

对于List数据源的筛选,有两种常见方式:

  1. 第一种是List.removeIf(),过滤掉 符合 条件的,这种方式不会改变List的引用地址,直接在原有地址上进行数据过滤
  2. 第二种则是List.stream().filter(),过滤掉 不符合 条件的,官方解释是会返回一个新的stream流

我的理解是新的stream流是一个新的数据源,但实际上新的stream流只是改变了引用地址,但内部数据源的元素地址都还是原来的
换句话说不管是用 List.stream().filter().collect(Collectors.toList()) 还是 List.stream().filter().findFirst(),获得的对象如果使用get()对内部元素数据进行了更改,那么List原来的数据源也会改变,所以在对数据源进行改动的时候,一定要考虑到该数据源是否在别的地方还有引用

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值