Java学习笔记java进阶干货Java开发那些事

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

2017-04-16  本文已影响2719人  锕456

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

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

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

package com.byron4j.hightLevel.java8.lambda;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 
 * <pre>
 *  Java8 的 forEach方法演示实例
 *      通过遍历打印集合元素比较 新旧方式的使用区别
 * </pre>
 * @author Byron.Y.Y
 */
public class Java8ForEachDemo {
    public static void main(String[] args) {
        
                List<Integer> myList = new ArrayList<Integer>();
                for(int i=0; i<3; i++) myList.add(i);
                
                System.out.println("<<<<<<<<Java8之前迭代方式start...>>>>>>>");
                Iterator<Integer> it = myList.iterator();
                while(it.hasNext()){
                    Integer i = it.next();
                    System.out.println("Iterator Value::"+i);
                }
                System.out.println("<<<<<<<<Java8之前迭代方式end.>>>>>>>");
                
                System.out.println("<<<<<<<<Java8使用forEach新迭代方式start...>>>>>>>");
                myList.forEach(s -> {System.out.println("Iterator Value::"+s);});
                
                System.out.println("<<<<<<<<Java8使用forEach新迭代方式end.>>>>>>>");
    }
}

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

<<<<<<<<Java8之前迭代方式start...>>>>>>>
Iterator Value::0
Iterator Value::1
Iterator Value::2
<<<<<<<<Java8之前迭代方式end.>>>>>>>
<<<<<<<<Java8使用forEach新迭代方式start...>>>>>>>
Iterator Value::0
Iterator Value::1
Iterator Value::2
<<<<<<<<Java8使用forEach新迭代方式end.>>>>>>>

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);
        }
    }

自定义消费行为动作Consumer action

package com.byron4j.hightLevel.java8.lambda;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;

/**
 * 
 * <pre>
 *  Java8 的 forEach方法演示实例
 *      通过遍历打印集合元素比较 新旧方式的使用区别
 * </pre>
 * @author Byron.Y.Y
 */
public class Java8ForEachDemo2 {
    public static void main(String[] args) {
        
                List<Integer> myList = new ArrayList<Integer>();
                for(int i=0; i<3; i++) myList.add(i);
                
                System.out.println("<<<<<<<<Java8之前迭代方式start...>>>>>>>");
                Iterator<Integer> it = myList.iterator();
                while(it.hasNext()){
                    Integer i = it.next();
                    System.out.println("Iterator Value::"+i);
                }
                System.out.println("<<<<<<<<Java8之前迭代方式end.>>>>>>>");
                
                System.out.println("<<<<<<<<Java8使用forEach新迭代方式start...>>>>>>>");
                myList.forEach(s -> {System.out.println("Iterator Value::"+s);});
                
                System.out.println("<<<<<<<<Java8使用forEach新迭代方式end.>>>>>>>");
    
                
                System.out.println("使用自定义的消费动作行为处理集合元素:");
                //创建自定义消费行为动作实例
                MyConsumer myConsumer = new MyConsumer();
                myList.forEach(myConsumer);
    }
    
    
    static class MyConsumer implements Consumer<Object>{

        @Override
        public void accept(Object t) {
            System.out.println("打印输出(动作执行的参数):" + t);
        }
        
    }
}

看看输出结果:

<<<<<<<<Java8之前迭代方式start...>>>>>>>
Iterator Value::0
Iterator Value::1
Iterator Value::2
<<<<<<<<Java8之前迭代方式end.>>>>>>>
<<<<<<<<Java8使用forEach新迭代方式start...>>>>>>>
Iterator Value::0
Iterator Value::1
Iterator Value::2
<<<<<<<<Java8使用forEach新迭代方式end.>>>>>>>
使用自定义的消费动作行为处理集合元素:
打印输出(动作执行的参数):0
打印输出(动作执行的参数):1
打印输出(动作执行的参数):2

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

上一篇 下一篇

猜你喜欢

热点阅读