Java8 编程规范入门之【forEach方法遍历集合】
2017-10-07 13:54
906 查看
在Java中我们需要处理Clloection的时候,通常需要创建一个Iterator实例来对集合进行迭代,在迭代中对每个或者某些元素进行业务逻辑的操作。如果迭代使用不当的话,则会抛出ConcurrentModificationException异常。
旧API、新的forEach API进行遍历打印集合中的元素对比
下面比较使用旧API、新的forEach API进行遍历打印集合中的元素:
旧API需要获取集合的Iterator迭代器实例来进行遍历;
新的API结合lambda表达式使用一行代码即可: myList.forEach(s -> {System.out.println("Iterator Value::"+s);});
两种方式得到的是一样的结果:
forEach方法接受一个在JAVA8中新增的java.util.function.Consumer的消费行为 或者称之为动作 (Consumeraction )类型;
然后将集合中的每个元素作为消费行为的accept方法的参数执行;
直到每个元素都处理完毕或者抛出异常即终止行为;
除非指定了消费行为action 的实现,否则默认情况下是按迭代里面的元素顺序依次处理。
再次,实现其accept方法
看看输出结果:
java.util.function.Consumer#accept
作者:东陆之滇
链接:http://www.jianshu.com/p/6babf082f4a3
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
转载自:http://www.jianshu.com/p/6babf082f4a3
相关链接:https://segmentfault.com/a/1190000007881498
旧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; /** * * <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); } }
forEach方法接受一个在JAVA8中新增的java.util.function.Consumer的消费行为 或者称之为动作 (Consumeraction )类型;
然后将集合中的每个元素作为消费行为的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; /** * * <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 接口以及方法
java.lang.Iterable#forEachjava.util.function.Consumer#accept
作者:东陆之滇
链接:http://www.jianshu.com/p/6babf082f4a3
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
转载自:http://www.jianshu.com/p/6babf082f4a3
相关链接:https://segmentfault.com/a/1190000007881498
相关文章推荐
- Java8 编程规范入门之【forEach方法遍历集合】
- Java8 编程规范入门之【forEach方法遍历集合】
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin
- 【Java编程】foreach支持集合、Collection、Iterable遍历原因分析
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与LinkedHashSet类))
- java 遍历map 方法 集合 五种的方法
- java中List对象集合的遍历方法
- Java中遍历集合的三种方法(for循环、for循环jdk1.5的新方法、Iterator接口)
- java中Map集合遍历方法
- NDK编程入门--C回调JAVA方法
- 【Java编程】Foreach对数组、Collection对象、Iterable对象的遍历
- Java遍历集合四种方法
- NDK编程入门--C回调JAVA方法(转)
- Java学习从入门到精通 4方法篇-Java基础-Java-编程开发
- Java使用foreach遍历集合元素
- 黑马程序员_两种遍历集合的方法Iterator接口和foreach循环
- java中Map集合的常用遍历方法及HashMap的应用实例
- Java遍历集合、数组的四种方法
- java 基础知识之遍历Map 方法集合
- Java遍历集合、数组的四种方法