📜  Java中的可迭代 forEach() 方法及示例

📅  最后修改于: 2022-05-13 01:54:23.516000             🧑  作者: Mango

Java中的可迭代 forEach() 方法及示例

Java 8 发布已经有一段时间了。随着该版本的发布,他们改进了一些现有的 API 并添加了一些新功能。其中之一是Java.lang.Iterable接口中的 forEach 方法。

每当我们需要遍历集合时,我们必须创建一个迭代器来遍历集合,然后我们可以将我们的业务逻辑放在一个循环中,用于集合中的每个元素。如果没有正确实现,我们可能会遇到ConcurrentModificationException

Iterable接口中forEach方法的实现是:

default void forEach(Consumer action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

参数:此方法采用Java.util 类型的参数操作。函数.Consumer 表示要为每个元素执行的操作。

返回: forEach 的返回类型为 void。因此它不返回任何东西。

异常:如果输入操作为空,则抛出NullPointerException

程序 1:使用迭代器迭代字符串列表的程序。

// Java program to demonstrate
// forEach() method of Iterable interface
  
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;
  
public class ForEachExample {
  
    public static void main(String[] args)
    {
        List data = new ArrayList<>();
        data.add("New Delhi");
        data.add("New York");
        data.add("Mumbai");
        data.add("London");
  
        Iterator itr = data.iterator();
        while (itr.hasNext()) {
  
            System.out.println(itr.next());
            // data.remove(itr.next());
            // this line can introduce you to
            // java.util.ConcurrentModificationException.
        }
    }
}
输出:
New Delhi
New York
Mumbai
London

程序 2:在包含城市列表的 List 上演示 forEach() 方法的程序。

// Java program to demonstrate
// forEach() method of Iterable interface
  
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
  
public class ForEachExample {
  
    public static void main(String[] args)
    {
        List data = new ArrayList<>();
        data.add("New Delhi");
        data.add("New York");
        data.add("Mumbai");
        data.add("London");
  
        data.forEach(new Consumer() {
  
            @Override
            public void accept(String t)
            {
  
                System.out.println(t);
            }
  
        });
    }
}
输出:
New Delhi
New York
Mumbai
London

在上面的程序中,我们创建了一个包含 4 个元素的字符串列表,然后我们使用 forEach 方法对列表进行了迭代。如前所述,forEach 方法以 Consumer 对象作为输入,我们创建了 Consumer 接口的匿名内部类实现并覆盖了 accept 方法。在这个例子中,我们将业务逻辑保留在匿名内部类中,我们不能重用它。

方案3:在这个方案中,我们将分别演示Consumer接口的实现,以便我们可以重用它。让我们创建一个实现 Consumer 接口并覆盖其接受方法的 CityConsumer 类。

// Java program to demonstrate
// forEach() method of Iterable interface
  
import java.util.*;
import java.util.function.Consumer;
  
class CityConsumer implements Consumer {
  
    @Override
    public void accept(String t)
    {
        System.out.println(t);
    }
}
  
// Now we can use the CityConsumer
// with forEach method by just creating
// an object of CityConsumer class as below.
  
public class ForEachExample {
  
    public static void main(String[] args)
    {
        List data = new ArrayList<>();
        data.add("New Delhi");
        data.add("New York");
        data.add("Mumbai");
        data.add("London");
  
        // create an object of CityConsumer
        // and pass it to forEach method
        CityConsumer cityConsumer = new CityConsumer();
        data.forEach(cityConsumer);
    }
}
输出:
New Delhi
New York
Mumbai
London

参考: https: Java/lang/Iterable.html