forEach

forEach 方法接收一个 Lambda 表达式,然后在 Stream 的每一个元素上执行该表达式。

清单  打印姓名(forEach 和 pre-java8 的对比)

1

2

3

4

5

6

7

8

9

10

// Java 8

roster.stream()

.filter(p -> p.getGender() == Person.Sex.MALE)

.forEach(p -> System.out.println(p.getName()));

// Pre-Java 8

for (Person p : roster) {

if (p.getGender() == Person.Sex.MALE) {

System.out.println(p.getName());

}

}

对一个人员集合遍历,找出男性并打印姓名。可以看出来,forEach 是为 Lambda 而设计的,保持了最紧凑的风格。而且 Lambda 表达式本身是可以重用的,非常方便。当需要为多核系统优化时,可以 parallelStream().forEach(),只是此时原有元素的次序没法保证,并行的情况下将改变串行时操作的行为,此时 forEach 本身的实现不需要调整,而 Java8 以前的 for 循环 code 可能需要加入额外的多线程逻辑。

但一般认为,forEach 和常规 for 循环的差异不涉及到性能,它们仅仅是函数式风格与传统 Java 风格的差别。

另外一点需要注意,forEach 是 terminal 操作,因此它执行后,Stream 的元素就被“消费”掉了,你无法对一个 Stream 进行两次 terminal 运算。下面的代码是错误的:

1

2

stream.forEach(element -> doOneThing(element));

stream.forEach(element -> doAnotherThing(element));

相反,具有相似功能的 intermediate 操作 peek 可以达到上述目的。如下是出现在该 api javadoc 上的一个示例。

清单 peek 对每个元素执行操作并返回一个新的 Stream

1

2

3

4

5

6

Stream.of("one", "two", "three", "four")

.filter(e -> e.length() > 3)

.peek(e -> System.out.println("Filtered value: " + e))

.map(String::toUpperCase)

.peek(e -> System.out.println("Mapped value: " + e))

.collect(Collectors.toList());

forEach 不能修改自己包含的本地变量值,也不能用 break/return 之类的关键字提前结束循环。

JDK 8 foreach的用法相关推荐

  1. php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?

    foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...

  2. php foreach是什么,php中foreach的用法是什么

    php中foreach的用法是:[foreach ($array as $value) {要执行代码;}],每进行一次循环,当前数组元素的值就会被赋值给$value变量,在进行下一次循环时,将得到数组 ...

  3. TCL foreach的用法

    文章目录 foreach var list body foreach var1 list1 ?var2 list2 var3 list3 ...? body 本篇文章介绍的是foreach的用法,fo ...

  4. php的foreach什么意思,php中foreach的用法是什么,php foreach as

    php中foreach的用法是什么PHP中foreach的用法是什么,foreach在php中的用法是:[foreach($ array as $ value){要执行的代码:}],对于每个循环,当前 ...

  5. php foreach详解,php foreach的用法详解,foreach怎么使用

    php foreach的用法详解详细解释了PHP foreach的用法,php foreach的用法:1.通过语法"foreach(array _ expression as $ value ...

  6. c语言foreach函数,c中foreach的用法

    下面小编就跟你们详细介绍下c中foreach的用法的用法,希望对你们有用. c中foreach的用法的用法如下: c:forEach>用法  博客分类: ?J2EE CC++C#JSPSQL 为 ...

  7. jstl标签forEach的用法--遍历java的集合

    再讲<c:forEach>之前,现讲一下让EL表达式生效的语句 <% @ page isELIgnored="false"%>这句语句在你想让EL表达式生效 ...

  8. JDK之jstat的用法

    jstat的用法 用以判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到java应用程序. Jstat ...

  9. php中foreach()的用法

    foreach()有两种用法: 1: foreach(array_name as $value)    {       statement;    } 这里的array_name是你要遍历的数组名,每 ...

  10. foreach的用法有哪些呢?

    电脑和手机等等一系列电子产品成为了我们生活中不可缺少的一部分,JAVA便成为了人们在生活中常常用到的知识,那么foreach语句有哪些用法呢? foreach语句的用法 foreach是JAVA中的一 ...

最新文章

  1. pipeline和java的区别_总结:四个Pipeline脚本式与声明式语法差异
  2. atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener...
  3. mysql1045错误如何解决,Java面试真题精选
  4. c dup 函数
  5. python散点图点的大小-Java 学习之路
  6. .NET开发的一些小技巧
  7. ModelAndView学习笔记
  8. c++堆栈溢出怎么解决_c语言进阶:堆栈原理揭秘
  9. 智能音箱 之 功放介绍
  10. 复制构造函数的用法及出现迷途指针问题
  11. 改写DataCogs在MOSS列表中实现三级联动字段
  12. 顺骐名车汽车服务器中心,骐风k7电动汽车怎么样?骐风k7电动汽车介绍
  13. 职场上,领导讨厌但老板喜欢的3类员工
  14. 论文笔记_S2D.07-2017-CVPR-RefineNet: 用于高分辨率语义分割的多路径精细网络
  15. Android插件框架VirtualAPK学习和使用
  16. mysql碎片data free_浅析MySQL数据碎片的产生(data free)
  17. 十个经典java开发项目及其描述-马上写到你的简历中去吧,祝你升职加薪
  18. PDM的工程图纸管理解决方案
  19. 硬件工程师-电阻知识大全
  20. YoLoV5学习(4)--detect.py程序(预测图片、视频、网络流)逐段讲解~

热门文章

  1. GNSS NMEA-0183协议解析
  2. SQL 标准发布第 15 部分:ISO/IEC 9075-15:2019 多维数组(SQL/MDA)
  3. RS-485接口协议详解
  4. CMOS数字集成电路
  5. 2014年计算机基础知识试题及答案,2014年计算机基础知识试题及答案大全—word版...
  6. 使用汉化版srvinstw.exe安装/卸载Windows系统服务
  7. python 自动化办公 随机生成题库文档
  8. 雷石柏云服务器指令,雷石KTV人工智能,让歌唱更自由
  9. Adobe Illustrator (AI)安装教程 (附安装包下载资源)
  10. cad黑色背景变成白色_学会了、让你前程似锦的CAD完整版教程