java中list.forEach()和list.stream().forEach()区别

网友投稿 534 2022-08-20


java中list.forEach()和list.stream().forEach()区别

目录概述区别

首先,它们的功能都是遍历数组每个元素并执行入参的accept()方法,但是它们的实现方式却不一样,在一些特定的情况下,执行会出现不同的结果。

在大多数情况下,两者都会产生相同的结果,但是,我们会看到一些微妙的差异。

概述

首先,创建一个迭代列表:

List list = Arrays.asList("A","B","C","D");

最直接的方法是使用增强的for循环:

for(String s : list"){

//something

}

如果我们想使用函数式java,我们也可以使用forEach()。我们可以直接在集合上这样做:

Consumer consumer = s -> {System.out::println};

list.forcEilzbEach(consumer);

或者,我们可以在集合的流上调用forEach():

list.stream().forEach(consumer);

两个版本都将迭代列表并打印所有元素:

ABCD ABCD

在这个简单的例子中,我们使用的forEach()没有区别。

区别

list.forEach()使用增强for循环

default void forEach(Consumer super T> action) {

Objects.requireNonNull(action);

for (T t : this) {

action.accept(t);

}

}

list.stream().forEach(): 它首先将集合转换为流,然后对集合的流进行迭代

当一边遍历一边删除的时候,forEach能够快速失败,而stream().forEach()只有等到数组遍历完之后才会抛异常

public class DeleteDifference {

public static void main(String[] args) {

List list = Arrays.asList("A", "B", "C", "D");

try {

list.forEachttp://h(item -> {

System.out.println(item);

list.remove(0);

});

} catch (Exception e) {

e.printStackTrace();

}

list.stream().forEach(item -> {

System.out.println(item);

list.remove(0);

});

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:lambda表达式与传统接口函数实现方式对比详解
下一篇:关于feign.codec.DecodeException异常的解决方案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~