(转载: https://mp.weixin.qq.com/s/-PHOc6p-qKJBktle28AUgA)

一: 直接把代码块赋值给变量

我们知道,对于一个Java变量,我们可以赋给其一个“值”。

如果你想把“一块代码”赋给一个Java变量,应该怎么做呢? 比如,如下

在Java 8之前,这个是做不到的。但是Java 8问世之后,利用Lambda特性,就可以做到了。

Lambda表达式本身就是一个接口的实现

这种只有一个接口函数需要被实现的接口类型,我们叫它”函数式接口“。

为了避免后来的人在这个接口中增加接口函数导致其有多个接口函数需要被实现,变成"非函数接口”,我们可以在这个上面加上一个声明@FunctionalInterface, 这样别人就无法在里面添加新的接口函数了:

这样,我们就得到了一个完整的Lambda表达式声明:

二: 可以把代码块作为函数参数

Lambda表达式最直观的作用就是使得代码变得异常简洁。

下图是java 7  和 java 8的对比:显示java 8 要简洁的多。

 我们就可以直接把Lambda作为参数传给函数, 而传统的Java必须有明确的接口实现的定义,初始化才行:

有些情况下,这个接口实现只需要用到一次。传统的Java 7必须要求你定义一个“污染环境”的接口实现MyInterfaceImpl,而相较之下Java 8的Lambda, 就显得干净很多。

三: Lambda结合FunctionalInterface Lib, forEach, stream(),method reference等新特性可以使代码变的更加简洁!

   使用stream, filter,  forEach等使代码非常简洁:

persons.stream().filter( ( p) -> p.getFirstName().startsWith("Z")).forEach((p)-> System.out.println(p.getFirstName()));

 四:Lambda配合Optional<T>可以使Java对于null的处理变的异常优雅

参考:http://www.cnblogs.com/liufei1983/p/8124551.html

最新文章

  1. 移动混合开发之HTML5在移动开发中的准则
  2. ajax设置自定义请求头信息
  3. ServletConfig对象和它在开发中的应用场
  4. 2014.7.12 敏捷个人奥森健步走&amp;敏友分享会.活动报道
  5. iOS AVCaptureVideoDataOutputSampleBufferDelegate 录制视频
  6. android总结
  7. 1021.Deepest Root (并查集+DFS树的深度)
  8. Ajax解析
  9. Cortex-M3动态加载三(模块调用系统函数)
  10. Qt creator使用笔记
  11. markdown的使用语法的补充
  12. PHP-FIG - PHP 标准规范
  13. ViewModel处理View相关事件的多种方式(非技术贴,仅学习总结)
  14. P2430 严酷的训练 题解
  15. X-UA-compatible浅谈
  16. WIN10下安装USB转串口驱动出现“文件的哈希值不在指定的目录”的解决办法
  17. Oracle 自启动配置
  18. du和df命令的区别
  19. Python线程event
  20. Linux下的MySQL主主复制

热门文章

  1. IIS 配置错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。 HTTP 错误 500.19
  2. 01 redis特点及安装使用
  3. mac下spark单机环境配置笔记
  4. iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题
  5. T-SQL简单查询语句(模糊查询)
  6. gridcontrol 之标题 GroupPanel设置 (标题设置,屏蔽右键)
  7. 替代或者与 Redis 配合存储十亿级别列表的数据.
  8. Channel (digital image) 通道 色彩深度 Color_depth
  9. 如何使用doctrine:migrations:migrate
  10. 用php動態產生各種尺寸的圖片