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

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 action = new Consumer()

{

@Override

public void accept(Object t)

{

//perform action

}

};

复制代码

2. Java 8 stream forEach示例

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

// 在stream元素上执行的 Java 8 forEach

ArrayList numberList = new ArrayList<>(Arrays.asList(1,2,3,4,5));

Consumer action = System.out::println;

numberList.stream().filter(n -> n%2 == 0).forEach( action );

复制代码

程序输出:

2

4

复制代码

3. Java 8 forEach 使用List示例

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

ArrayList numberList = new ArrayList<>(Arrays.asList(1,2,3,4,5));

Consumer action = System.out::println;

numberList.forEach(action);

复制代码

程序输出:

1

2

3

4

5

复制代码

4. Java 8 forEach 使用Map示例

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

HashMap map = new HashMap<>();

map.put("A", 1);

map.put("B", 2);

map.put("C", 3);

//1. Map entries

Consumer> action = System.out::println;

map.entrySet().forEach(action);

//2. Map keys

Consumer actionOnKeys = System.out::println;

map.keySet().forEach(actionOnKeys);

//3. Map values

Consumer 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 map = new HashMap<>();

map.put("A", 1);

map.put("B", 2);

map.put("C", 3);

Consumer> 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

复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值