原创

JAVA8系列教程-forEach

温馨提示:
本文最后更新于 2019年12月15日,已超过 1,596 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

JAVA的forEach是一个实用方法来遍历集合或,并执行它的每个元件上的特定动作。

1. Java 8 forEach方法

下面的代码片段显示的默认实现的java的forEach方法Iterable接口。它使该方法可用于除Map之外的所有集合类

该方法执行每个元素的给定动作Iterable直到所有元素都已经被处理或动作抛出异常。

action代表接受单个输入参数,并返回任何结果的操作。它是Consumer接口的一个实例

Iterable.java
default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}

可以使用此简单语法创建自定义操作。在这里,Objecttype必须用集合或流中元素的类型替换。

Consumer<Object> action = new Consumer<Object>()
{
    @Override
    public void accept(Object t)
    {
        //perform action
    }
};

2. Java 8流forEach示例

Java程序迭代流的所有元素并执行操作。在此示例中,我们将打印所有偶数。

Java 8 forEach over stream elements
ArrayList<Integer> numberList = new ArrayList<>(Arrays.asList(1,2,3,4,5));
     
Consumer<Integer> action = System.out::println;
 
numberList.stream().filter(n -> n%2  == 0).forEach( action );

程序输出。

Console
2
4

3.使用List的Java forEach示例

Java程序遍历arraylist所有元素并执行操作。这里的操作就像在控制台中打印出元素一样简单。

Java 8 forEach list elements
ArrayList<Integer> numberList = new ArrayList<>(Arrays.asList(1,2,3,4,5));
     
Consumer<Integer> action = System.out::println;
 
numberList.forEach(action);

程序输出。

Console
1
2
3
4
5

4.使用Map的Java forEach示例

Java程序遍历HashMap所有条目并执行操作。我们还可以遍历映射键和值,并对所有元素执行任何操作。

Java 8 forEach map entries
HashMap<String, Integer> map = new HashMap<>();
     
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
 
//1. Map entries
Consumer<Map.Entry<String, Integer>> action = System.out::println;
 
map.entrySet().forEach(action);
 
//2. Map keys
Consumer<String> actionOnKeys = System.out::println;
 
map.keySet().forEach(actionOnKeys);
 
//3. Map values
Consumer<Integer> actionOnValues = System.out::println;
 
map.values().forEach(actionOnValues);

程序输出。

Console
A=1
B=2
C=3
 
A
B
C
 
1
2
3

3.创建自定义动作

我们还可以创建自定义操作方法,以对集合中的每个元素执行自定义逻辑。

Create custom action method
HashMap<String, Integer> map = new HashMap<>();
     
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
 
Consumer<Map.Entry<String, Integer>> action = entry ->
{
    System.out.println("Key is : " + entry.getKey());
    System.out.println("Value is : " + entry.getValue());
};
 
map.entrySet().forEach(action);

程序输出。

Console
Key is : A
Value is : 1
 
Key is : B
Value is : 2
 
Key is : C
Value is : 3

学习愉快!

References:

Java Iterable Interface

正文到此结束
本文目录