Java Collection.stream().forEach()与Collection.forEach()的区别
Collection.forEach()和Collection.stream().forEach()用于在集合上进行迭代,两者之间没有太大的区别,因为它们都给出了相同的结果,尽管它们的内部工作有一些区别。
Collection.stream().forEach() 基本上用于在一组对象中进行迭代,将一个集合转换为流,然后在集合的流上进行迭代。在对集合进行迭代时,如果对集合进行了任何结构上的改变,那么它将抛出并发修改异常。
Collection.forEach() 使用集合的迭代器(以指定者为准)。大多数集合都不允许在迭代该集合时修改结构。如果该集合发生任何变化,例如增加一个元素或删除一个元素,那么它们将抛出并发修改错误。如果collection.forEach()是在一个同步的集合上进行迭代,那么他们将锁定集合的片段,并在所有可以对该集合进行的调用中保持它。
Collection.stream().forEach()与Collection.forEach()之间的区别
Collection.stream().forEach() | Collection.forEach() |
---|---|
Collection.stream().forEach()也用于迭代集合,但它首先将集合转换为流,然后对集合的流进行迭代。 | Collection.forEach()使用集合迭代器。 |
与Collection.forEach()不同,它不以任何特定的顺序执行,也就是说,没有定义顺序。 | 如果指定了迭代顺序,则总是按照迭代顺序执行。 |
在集合中的结构修改过程中,该异常将在以后被抛出。 | 如果我们使用collection.forEach()在集合中进行任何结构性修改,它将立即抛出一个异常。 |
如果迭代是在同步集合上进行的,那么它不会锁定该集合。 | 如果迭代发生在同步集合上,那么它将锁定该集合并在所有的调用中保持该集合。 |
下面是一个Java程序,展示Collection.stream.forEach()的用法。
// Java Program to show the demonstration of
// Collection.stream().forEach()
import java.io.*;
import java.util.*;
class GFG {
public static void main(String[] args)
{
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(6);
list.add(3);
list.add(4);
// printing each element of list using forEach loop
list.stream().forEach(System.out::print);
}
}
输出
5634
下面是一个Java程序,展示Collection.forEach()方法的用法。
// Java Program to show the demonstration of
// Collection.forEach()
import java.io.*;
import java.util.*;
class GFG {
public static void main(String[] args)
{
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(6);
list.add(3);
list.add(4);
// printing each element of list
list.forEach(System.out::print);
}
}
输出
5634