Lambda表达式

胡泽宇 2020年02月07日 96次浏览

函数式接口

只有一个抽象方法的接口,就叫函数式接口。

Lambda表达式

本质就是函数式接口的匿名内部类。
只保留了匿名内部类中所实现抽象方法的参数列表和方法体部分,并在参数列表和方法体之间用 -> 隔开。

实例:

  • 先定义一个函数式接口
    1
    • @FunctionalInterface注解是用于修饰函数式接口,作用与@Override类似,都用于"报错"。
  • 传统实现匿名内部类方式:
    2
  • 使用Lambda表达式:
    3

完整代码:

4
运行结果:
5

Lambda表达式的简化:

  • 通常,写形参列表都省略形参类型。
  • 如果形参列表只有一个参数,形参列表的圆括号可以省略。
  • 如果方法体只有一条代码,方法体的花括号可以省略。
  • 如果方法体只有一条代码,并且这条代码是return语句,那么可以省略return关键字。

简写实例:

5

Lambda表达式的方法引用和构造器引用

特定条件:

只有方法体只有一条代码时才可使用。

  • 方法引用
    • 引用类方法:
      • 传统: (参数列表) -> 某个类.某个方法(参数列表)
      • 新型: 某个类::某个方法;
    • 引用第一个参数对象实例方法:
      • 传统:(参数1,其他参数) ->参数1.某个方法(其他参数)
      • 新型:参数1的类型::某个方法;
    • 引用特定对象的实例方法:
      • 传统:(参数列表) -> 某个对象.某个方法(参数列表);
      • 新型:某个对象::某个方法;
  • 构造器引用
    • 传统:(参数列表) -> new 某个类的构造器(参数列表);
    • 新型:某个类的构造器名(其实就是类名)::new;

方法引用和构造器引用实例:

  • 引用类方法:
    6
  • 引用第一个参数对象实例方法:
    7
  • 引用特定对象的实例方法:
    8
  • 构造器引用:
    9