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

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

查看所有标签

猜你喜欢:

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

算法精解

算法精解

Kyle Loudon / 肖翔、陈舸 / 机械工业出版社 / 2012-8 / 79.00元

本书是数据结构和算法领域的经典之作,十余年来,畅销不衰!全书共分为三部分:第一部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习这本书打下坚实的基础;第二部分对链表、栈、队列、集合、哈希表、堆、图等常用数据结构进行了深入阐述;第三部分对排序、搜索数值计算、数据压缩、数据加密、图算法、几何算法......一起来看看 《算法精解》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试