Lambda表达式 — 代码的简化
语法 使用前提
引入
面向对象思想 – 什么对象,做了什么,结果是什么
函数式思想 – 强调做什么,而不是以什么形式做
语法
(参数列表)->{一些代码}
1.参数列表 — 表示要重写的抽象方法的参数列表
2.一些代码 — 要重写的方法的方法体
3."->" — 固定语法
使用前提
1.实现一个接口;
2.接口中只有一个抽象方法(如Runnable(I),Comparator(I) );但接口中默认/静态/私有方法是可以有的,是随意的.
3.接口对象是作为方法参数使用的;
4.实现函数式接口@FunctionalInterface – 用来检验这个接口是不是函数式接口
又把这种接口叫做"函数式接口"
Lambda表达式与匿名内部类的区别
匿名内部类 — 本质还是类,有字节码对象
Lambda表达式 — 本质是函数,所以编译后不会有字节码文件,也就不与要加载 – 效率高
Lambda表达式 – 可推导即可省略
- () 中的参数类型, 可以省略, 如果有多个参数, 每个参数类型都要一起省略
- {} 中如果只有一行代码, 不论这个方法有没有返回值, 那么[{} return ;] 可以省略**{} 和return和" ;" 必须一起省略**
- () 中如果只有一个参数, () 可以省略, 和类型一起省略
() 中如果没有参数, 必须写 ()
补充 - 注解
@FunctionalInterface -> 注解
注解: JDK 1.5 属于程序的一部分, 可以取代一部分配置信息
@Override -> 检测方法是不是重写
@SuppressWarnings -> 压制警告
@Deprecated -> 标记一个类或者方法或者变量, 过时的
@FunctionalInterface -> 检测一个接口是不是函数式接口