java8 Lambda表达式学习笔记 Lambda表达式学习笔记

  • 当某个接口中只有一个抽象方法(不包括静态方法和默认方法),该接口称为 FunctionalInterface ,仅当这种接口,我们可以使用lambda表达式来实现该接口方法。可以在接口上标注@FunctionalInterface标签,可以用于校验该接口是否可以使用Lambda方式,比如你在接口中声明了两个public的方法,这时候你还添加了 @FunctionalInterface标签处会报错;java原本的很多接口在java8之后都加上了这个标签,可以参见Runable接口和Comparator接口

  • lambda表达式的特点主要包括:
    1.匿名的
    2.函数式的
    3.可以传参的
    4.清晰简洁的

  • lambda表达式注意点
    1.“->”后带有花括号,就要有return关键字
    2.参数如果超过一个,所有参数就必须用“()”扩住
    3.参数的类型可以省略掉,会根据方法推导出相应的类型

  • lambda表达式的语法构成
    参数列表  |  方法体部分

(o1, o2)  ->  o1.getColor().compareTo(o2.getColor());

举例几个合法的lambda表达式
(String ss) -> ss.length();
(Apple a) -> a.getColor.equals("red");

  • lambda相当于是一个匿名函数,当在lambda的函数体类使用调用lambda函数的主函数中的变量时,该变量默认转换成final类型的。即:

public static void main(String[] args){
  int i=0;
  Runnable runnable = () -> System.out.println(i++);
}
此时写成i++是错误的,在lambda使用了i的时候,就默认将i改为final类型的变量了。

同样的,如果是lambda里正常只读的i,但是在lambda之后又对i进行了改变,这时候lambda里的i同样会编译失败。