原由:昨天在写一个需求的时候,我想遍历一个集合,找到该集合下实体类里面的某个字段和我想要的相等的,并把它替换掉。这个时候按说找到以后替换掉就应该跳出循环了,可是在用lambda的foreach方法时并无找到该方法,最后是用普通for循环来解决的。java
最后由同事提示能够用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作判断。google
关于lambda的foreach和普通for循环来讲是有性能差别的,本身没有测,只是看了几篇关于这个的帖子,spa
参考:https://blog.csdn.net/shaoyangdd/article/details/78992497
.net
以前由于以为lambda表达式用起来很酷,代码很简洁因此对集合遍历的时候一直在用lambda的foreach,其实目前业务上用到的遍历彻底能够用普通for循环来代替blog