自Java 8发布以来已经有一段时间了。在此版本中,他们改进了一些现有的API,并增加了一些新函数。其中之一是java.lang.Iterable接口中的forEach方法。
每当我们需要遍历一个集合时,我们都必须创建一个Iterator来迭代该集合,然后我们可以将业务逻辑包含在该集合中每个元素的循环中。如果未正确实现,我们可能会遇到ConcurrentModificationException。
Iterable接口中forEach方法的实现是:
default void forEach(Consumer action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
参数:此方法采取类型为java.util.function.Consumer的参数操作,该参数操作表示要对每个元素执行的操作。
返回值:forEach的返回类型为void。因此,它不返回任何内容。
异常:如果输入操作为null,则抛出NullPointerException。
示例1:程序使用迭代器迭代String列表。
// 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<String> data = new ArrayList<>();
data.add("New Delhi");
data.add("New York");
data.add("Mumbai");
data.add("London");
Iterator<String> 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:用于在包含城市列表的列表上演示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<String> data = new ArrayList<>();
data.add("New Delhi");
data.add("New York");
data.add("Mumbai");
data.add("London");
data.forEach(new Consumer<String>() {
@Override
public void accept(String t)
{
System.out.println(t);
}
});
}
}
New Delhi New York Mumbai London
在上面的程序中,我们创建了一个包含4个元素的字符串列表,然后使用forEach方法遍历该列表。如前所述,forEach方法将Consumer对象作为输入,我们创建了Consumer接口的匿名内部类实现,并覆盖了accept方法。在此示例中,我们将业务逻辑保留在匿名内部类内,并且我们无法重用它。
示例3:在此程序中,我们将分别演示Consumer接口的实现,以便我们可以重用它。让我们创建一个CityConsumer类,该类实现Consumer接口并覆盖其accept方法。
// Java program to demonstrate
// forEach() method of Iterable interface
import java.util.*;
import java.util.function.Consumer;
class CityConsumer implements Consumer<String> {
@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<String> 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://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html
相关用法
- Java LinkedBlockingDeque forEach()用法及代码示例
- Java CopyOnWriteArraySet forEach()用法及代码示例
- Java LinkedTransferQueue forEach()用法及代码示例
- Java Stream forEach()用法及代码示例
- Java HashTable forEach()用法及代码示例
- Java CopyOnWriteArrayList forEach()用法及代码示例
- Java HashMap forEach(BiConsumer)用法及代码示例
- Java Properties forEach(BiConsumer)用法及代码示例
- Java Vector forEach()用法及代码示例
- Java ArrayList forEach()用法及代码示例
- Java ArrayDeque forEach()用法及代码示例
- Java IntStream forEach()用法及代码示例
- Java DoubleStream forEach()用法及代码示例
- Java LongStream forEach()用法及代码示例
- Java Iterator转Iterable用法及代码示例
注:本文由纯净天空筛选整理自go2ksr大神的英文原创作品 Iterable forEach() method in Java with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。