java集合forEach方法_Java8 编程规范入门之【forEach方法遍历集合】

在Java中我们需要处理Clloection的时候,通常需要创建一个Iterator实例来对集合进行迭代,在迭代中对每个或者某些元素进行业务逻辑的操作。如果迭代使用不当的话,则会抛出ConcurrentModificationException异常。

旧API、新的forEach API进行遍历打印集合中的元素对比

下面比较使用旧API、新的forEach API进行遍历打印集合中的元素:

旧API需要获取集合的Iterator迭代器实例来进行遍历;

新的API结合lambda表达式使用一行代码即可:myList.forEach(s -> {System.out.println("Iterator Value::"+s);});

package com.byron4j.hightLevel.java8.lambda;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

/**

*

*

 
 

* Java8 的 forEach方法演示实例

* 通过遍历打印集合元素比较 新旧方式的使用区别

*

* @author Byron.Y.Y

*/

public class Java8ForEachDemo {

public static void main(String[] args) {

List myList = new ArrayList();

for(int i=0; i<3; i++) myList.add(i);

System.out.println("<<<<<<<>>>>>>");

Iterator it = myList.iterator();

while(it.hasNext()){

Integer i = it.next();

System.out.println("Iterator Value::"+i);

}

System.out.println("<<<<<<<>>>>>>");

System.out.println("<<<<<<<>>>>>>");

myList.forEach(s -> {System.out.println("Iterator Value::"+s);});

System.out.println("<<<<<<<>>>>>>");

}

}

两种方式得到的是一样的结果:

<<<<<<<>>>>>>

Iterator Value::0

Iterator Value::1

Iterator Value::2

<<<<<<<>>>>>>

<<<<<<<>>>>>>

Iterator Value::0

Iterator Value::1

Iterator Value::2

<<<<<<<>>>>>>

JAVA8中forEach方法的详解

forEach方法是JAVA8中在集合父接口java.lang.Iterable中新增的一个default实现方法:

default void forEach(Consumer super T> action) {

Objects.requireNonNull(action);

for (T t : this) {

action.accept(t);

}

}

forEach方法接受一个在JAVA8中新增的java.util.function.Consumer的消费行为 或者称之为动作 (Consumer action )类型;

然后将集合中的每个元素作为消费行为的accept方法的参数执行;

直到每个元素都处理完毕或者抛出异常即终止行为;

除非指定了消费行为action 的实现,否则默认情况下是按迭代里面的元素顺序依次处理。

自定义消费行为动作Consumer action

首先,需要实现java.util.function.Consumer接口;

再次,实现其accept方法

package com.byron4j.hightLevel.java8.lambda;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.function.Consumer;

/**

*

*

 
 

* Java8 的 forEach方法演示实例

* 通过遍历打印集合元素比较 新旧方式的使用区别

*

* @author Byron.Y.Y

*/

public class Java8ForEachDemo2 {

public static void main(String[] args) {

List myList = new ArrayList();

for(int i=0; i<3; i++) myList.add(i);

System.out.println("<<<<<<<>>>>>>");

Iterator it = myList.iterator();

while(it.hasNext()){

Integer i = it.next();

System.out.println("Iterator Value::"+i);

}

System.out.println("<<<<<<<>>>>>>");

System.out.println("<<<<<<<>>>>>>");

myList.forEach(s -> {System.out.println("Iterator Value::"+s);});

System.out.println("<<<<<<<>>>>>>");

System.out.println("使用自定义的消费动作行为处理集合元素:");

//创建自定义消费行为动作实例

MyConsumer myConsumer = new MyConsumer();

myList.forEach(myConsumer);

}

static class MyConsumer implements Consumer{

@Override

public void accept(Object t) {

System.out.println("打印输出(动作执行的参数):" + t);

}

}

}

看看输出结果:

<<<<<<<>>>>>>

Iterator Value::0

Iterator Value::1

Iterator Value::2

<<<<<<<>>>>>>

<<<<<<<>>>>>>

Iterator Value::0

Iterator Value::1

Iterator Value::2

<<<<<<<>>>>>>

使用自定义的消费动作行为处理集合元素:

打印输出(动作执行的参数):0

打印输出(动作执行的参数):1

打印输出(动作执行的参数):2

需要了解的几个新的API 接口以及方法

java.lang.Iterable#forEach

java.util.function.Consumer#accept

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值