Java8为所有的集合添加了一个新的方法forEach(),该方法只读形式遍历集合所有的元素为每一个元素执行一个动作
测试案例
package com.july.test.controller;import java.util.Arrays;/*** @author zqk* @since 2020/2/6*/public class Test {public static void main(String[] args) {Arrays.asList("1","2","3").forEach(System.out::println);}}
上面这段代码是,我们创建一个List集合,然后使用forEach()方法遍历集合的每一个元素,然后把元素传递给System.out.println()方法进行打印。
对于这个功能,我们如果使用普通for()遍历会是如下代码
普通for循环遍历
package com.july.test.controller;import java.util.Arrays;import java.util.List;/*** @author zqk* @since 2020/2/6*/public class Test {public static void main(String[] args) {//Arrays.asList("1","2","3").forEach(System.out::println);List strings = Arrays.asList("1","2","3");for (String string : strings) {System.out.println(string);}}}
forEach()方法
forEach()方法是Java8为所有的集合新增的方法,该方法定义在java.lang.Iterable接口中。
java.lang.Iterable接口是在Java5版本时引入的,其目的就是为实现该语句的对象提供for-each语句。意思就是所有实现该接口的对象都可以使用for语句进行迭代。
forEach方法原型如下:
default void forEache(Consumersuper T action>)
从上面的原型可以看出,forEach()方法是Iterable的默认方法,因此所有的子类都不用去实现。forEach()类似于以下代码结构:
for(T t:this){action.accept(t);}
forEach()迭代一个哈希表
接下来我们使用forEach()方法和Lambda表达式来迭代一个哈希表,代码如下:
package com.july.test.controller;import java.util.Arrays;import java.util.HashMap;import java.util.List;import java.util.Map;/*** @author zqk* @since 2020/2/6*/public class Test {public static void main(String[] args) {//Arrays.asList("1","2","3").forEach(System.out::println);/*List strings = Arrays.asList("1","2","3");for (String string : strings) {System.out.println(string);}*/Map stringMap = new HashMap<>();stringMap.put("name","zengxueqi");stringMap.put("password","123456");stringMap.put("sex","woman");stringMap.put("tel","19913146666");//forEach遍历stringMap.forEach((s, s2) -> System.out.println("label:" + s + ",value:" + s2));stringMap.forEach((s, s2) -> {if(s2.equals("zengxueqi")){System.out.println("label:" + s);}});}}运行结果:Connected to the target VM, address: '127.0.0.1:61131', transport: 'socket'label:password,value:123456label:sex,value:womanlabel:name,value:zengxueqilabel:tel,value:19913146666label:nameDisconnected from the target VM, address: '127.0.0.1:61131', transport: 'socket'Process finished with exit code 0
forEach()迭代一个流
接下来我们使用forEach()方法迭代一个流,然后输出流中的所有元素,代码如下:
package com.july.test.controller;import java.util.Arrays;/*** @author zqk* @since 2020/2/6*/public class Test {public static void main(String[] args) {Arrays.asList("1","2","3").stream().filter(s -> s.contains("1")).forEach(System.out::println);}}运行结果:Connected to the target VM, address: '127.0.0.1:61370', transport: 'socket'1Disconnected from the target VM, address: '127.0.0.1:61370', transport: 'socket'Process finished with exit code 0
end
程序员:july