关于Java的lambda表达式的一些总结

Lambda表达式

格式:  ()->{}
  1. 表达式如果只有一句话,可以不用{},也不能用{};
  2. 无需指定返回类型,会由上下文推导而得;
  3. lambda表达式要么每一个分支都需要有返回值,要么每一个分支都没有返回值;
  4. 如果表达式只有一个参数,可以省略();
  5. lambda表达式内部可以捕获外部变量的值,但这个值必须是最终变量,即不能改变;
  6. lambda表达式中声明一个与局部变量同名的的变量或参数是不合法的;
  7. 在一个lambda表达式中使用this关键字,是指创建这个lambda表达式的方法的this参数,即这个类的this;通过this对成员变量的操作修改是允许的。(说简单点就是在使用和普通正常的在方法中使用this没有区别)

函数式接口:对于只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个lambda表达式。这种接口称为函数式接口

比如Comparator接口只有一个compare()方法,因此它是一个函数式接口;

当使用Arrays.sort(数组,实现comparator接口的实例)方法时,第二个参数可以直接用lambda表达式的代码块

方法引用

例如

	System.out::println 等价于 x->System,out.println(x)
    Math::pow 等价于 (x,y)-> Math.pow(x,y)
  • object::instanceMethod
  • Class::staticMethod
  • Class::instanceMethod

前两种方法引用等价于提供方法参数的lambda表达式。
第三种情况,第一个参数会成为方法的目标
例如

String::compareToIgnoreCase 等价于 (x,y)->x.compareToIgnoreCase(y)

你可能感兴趣的:(关于Java的lambda表达式的一些总结)