舊API、新的forEach API進行遍歷打印集合中的元素對比
下面比較使用舊API、新的forEach API進行遍歷打印集合中的元素:
舊API需要獲取集合的Iterator迭代器實例來進行遍歷纪挎;
新的API結(jié)合lambda表達式使用一行代碼即可:myList.forEach(s -> {System.out.println("Iterator Value::"+s);});
package com.spring.lambda;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
<pre>
Java8 的 forEach方法演示實例
通過遍歷打印集合元素比較 新舊方式的使用區(qū)別
-
</pre>
*/
public class ForEachDemo {
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.>>>>>>>");
}
}
兩種方式得到的是一樣的結(jié)果:
<<<<<<<<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實現(xiàn)方法:
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方法的參數(shù)執(zhí)行;
直到每個元素都處理完畢或者拋出異常即終止行為帝雇;
除非指定了消費行為action 的實現(xiàn),否則默認情況下是按迭代里面的元素順序依次處理蛉拙。
自定義消費行為動作Consumer action
首先尸闸,需要實現(xiàn)java.util.function.Consumer接口;
再次孕锄,實現(xiàn)其accept方法
需要了解的幾個新的API 接口以及方法
java.lang.Iterable#forEach
java.util.function.Consumer#accept