java中list.forEach()和list.stream().forEach()的区别是什么
首先,它们的功能都是遍历数组每个元素并执行入参的accept()方法,但是它们的实现方式却不一样,在一些特定的情况下,执行会出现不同的结果。在大多数情况下,两者都会产生相同的结果,但是,我们会看到一些微妙的差异。概述首先,创建一个迭代列表:Listlist=Arrays.asList("A","B","C","D");最直接的方法是使用增强的for循环:for(Strings:list"){//something}如果我们想使用函数式Java,我们也可以使用forEach()。我们可以直接在集合上这样做:
首先,它们的功能都是遍历数组每个元素并执行入参的accept()方法,但是它们的实现方式却不一样,在一些特定的情况下,执行会出现不同的结果。
在大多数情况下,两者都会产生相同的结果,但是,我们会看到一些微妙的差异。
概述
首先,创建一个迭代列表:
Listlist = Arrays.asList("A","B","C","D");
最直接的方法是使用增强的for循环:
for(String s : list"){
//something
}如果我们想使用函数式Java,我们也可以使用forEach()。我们可以直接在集合上这样做:
Consumerconsumer = s -> {System.out::println}; list.forEach(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.forEach(item -> {
System.out.println(item);
list.remove(0);
});
} catch (Exception e) {
e.printStackTrace();
}
list.stream().forEach(item -> {
System.out.println(item);
list.remove(0);
});
}
}
火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。
















