[Java 8 Tutorial翻译系列]Java forEach详解

栏目: 编程语言 · Java · 发布时间: 6年前

内容简介:Java forEach是一个对collection或者stream迭代以及对其中的每个元素执行某个动作的实用方法。下面的代码片段展示了在Iterable interface中java forEach方法的默认实现。这样可以使除了Map类之外的所有collection类使用它。该方法将会对每个迭代元素执行给定的动作,直到所有元素被处理完毕或者动作抛出了一个异常。

Java forEach是一个对collection或者stream迭代以及对其中的每个元素执行某个动作的实用方法。

1. Java 8 forEach 方法

下面的代码片段展示了在Iterable interface中java forEach方法的默认实现。这样可以使除了Map类之外的所有collection类使用它。

该方法将会对每个迭代元素执行给定的动作,直到所有元素被处理完毕或者动作抛出了一个异常。

action代表一个接受单个输入参数并且不返回任何值的操作。它是 Consumer interface的一个实例。

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

一个定制的action可以用如下的简单语法生成。在这里 Object 类型将会被collection或者stream里的元素类型替代。

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

2. Java 8 stream forEach示例

在这个例子当中,我们将打印所有偶数。

// 在stream元素上执行的 Java  8 forEach
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 );
复制代码

程序输出:

2
4
复制代码

3. Java 8 forEach 使用List示例

这里的action仅仅只是将元素打印到控制台。

ArrayList<Integer> numberList = new ArrayList<>(Arrays.asList(1,2,3,4,5));
     
Consumer<Integer> action = System.out::println;
 
numberList.forEach(action);
复制代码

程序输出:

1
2
3
4
5
复制代码

4. Java 8 forEach 使用Map示例

我们也可以在map keys和values上迭代以及在所有元素上执行任何动作。

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);
复制代码

程序输出:

A=1
B=2
C=3
 
A
B
C
 
1
2
3
复制代码

5. 创建自定义的action

我们也能创建 自定义的action方法 来执行为每个collection中的元素自定义的逻辑。

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);
复制代码

程序输出:

Key is : A
Value is : 1
 
Key is : B
Value is : 2
 
Key is : C
Value is : 3
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web 2.0 Architectures

Web 2.0 Architectures

Duane Nickull、Dion Hinchcliffe、James Governor / O'Reilly / 2009 / USD 34.99

The "Web 2.0" phenomena has become more pervasive than ever before. It is impacting the very fabric of our society and presents opportunities for those with knowledge. The individuals who understand t......一起来看看 《Web 2.0 Architectures》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换