lambda表达式替换list中某个实体类的某个元素值

起因:昨天在写一个需求的时候,我想遍历一个集合,找到该集合下实体类里面的某个字段和我想要的相等的,并把它替换掉。这个时候按说找到之后替换掉就应该跳出循环了,但是在用lambda的foreach方法时并没有找到该方法,最后是用普通for循环来解决的。

最后由同事提示可以用filter来处理,我试了一下,可以达到想要的效果,直接贴代码:

import com.google.common.collect.Lists;
import java.util.List;
import java.util.stream.Collectors;

public class Test {
    public static void main(String[] args) {
        Bean bean1 = new Bean(1, 2);
        Bean bean2 = new Bean(3, 4);
        List<Bean> list = Lists.newArrayList(bean1, bean2);
        System.out.println("list1 : " + list);
        list.stream().filter(bean -> {
            if (1 == bean.getNum1())
                bean.setNum1(2);
            return true;
        }).collect(Collectors.toList());
        System.out.println("list2 : " + list);
    }
}
list1 : [Bean(num1=1, num2=2.0), Bean(num1=3, num2=4.0)]
list2 : [Bean(num1=2, num2=2.0), Bean(num1=3, num2=4.0)]
前后list1和list2的比较可以发现确实bean1的num1确实改成了2。但是filter的执行过程是遍历所有元素,即:即使找到了bean1并修改之后,filter仍旧会对bean2做判断。

关于lambda的foreach和普通for循环来说是有性能差异的,自己没有测,只是看了几篇关于这个的帖子,

参考:https://blog.csdn.net/shaoyangdd/article/details/78992497

之前因为觉得lambda表达式用起来很酷,代码很简洁所以对集合遍历的时候一直在用lambda的foreach,其实目前业务上用到的遍历完全可以用普通for循环来代替
————————————————
版权声明:本文为CSDN博主「qq_35671159」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35671159/article/details/80910769

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值