随着函数式编程的风靡,在代码中
forEach
的影子随处可见。
下面我们来看一下它的使用技巧
talk is cheap, show me the code.
Java中的forEach
-
forEach遍历
Arrays.asList(1,2,3,4,5).forEach(i -> { System.out.println("number " + i); });
控制台输出
number 1 number 2 number 3 number 4 number 5
-
forEach遍历 +
continue
需要注意的是,forEach
中是不能使用continue
关键字的,但是可以使用return
来替代
因为forEach(Consumer<? super T> action)
参数是一个Consumer的函数式接口,
return
并不是结束的forEach
,而是结束的当前lambda
的方法体,
所以在这里可以巧妙的利用return
来达到continue
的效果。Arrays.asList(1,2,3,4,5).forEach(i -> { if (i == 3) { return; } System.out.println("number " + i); });
控制台输出
number 1 number 2 number 4 number 5
-
forEach遍历 +
break
同样,forEach
中也不能使用break
关键字。
要在forEach
中实现break
的效果,可以通过throw
抛异常来实现。Arrays.asList(1,2,3,4,5).forEach(i -> { if (i == 3) { throw new RuntimeException("碰到3了..."); } System.out.println("number " + i); });
控制台输出
number 1 number 2 Exception in thread "main" java.lang.RuntimeException: 碰到3了...
JavaScript中的forEach
-
forEach遍历
[1,2,3,4,5].forEach(i => console.log('number', i))
控制台输出
number 1 number 2 number 3 number 4 number 5
-
forEach遍历 +
continue
同Java
中一样,可以使用return
来实现continue
的效果。[1,2,3,4,5].forEach(i => { if(i == 3) { return } console.log('number', i) })
控制台输出
number 1 number 2 number 4 number 5
-
forEach遍历 +
break
同Java
中一样,可以使用throw
抛异常,来实现break
的效果。[1,2,3,4,5].forEach(i => { if (i == 3) { throw new Error("碰到3了...") } console.log('number', i) })
控制台输出
number 1 number 2 Error: 碰到3了...