特征

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

与python差异

python 用lamda关键字实现
java 通过函数式接口实现

函数式接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
就是用函数实现接口,支持lamda表达式

内置常用接口 例子

Predicate 接受一个输入参数,返回一个布尔值结果。

  1. Predicate<Integer> b = (it)->it>3;
  2. boolean test = b.test(5);
  3. System.out.println(test);

Function 接受一个输入参数,返回一个结果。

  1. Function<Integer,String> b = String::valueOf;
  2. String apply = b.apply(5);
  3. System.out.println(apply.getClass());

Supplier 无参数,返回一个结果。

  1. Supplier<Date> b = Date::new;
  2. Date aBoolean = b.get();
  3. System.out.println(aBoolean);

Consumer 代表了接受一个输入参数并且无返回的操作

  1. ArrayList<Object> objects3 = new ArrayList<>();
  2. Consumer<Date> b = objects3::add;
  3. b.accept(new Date());
  4. b.accept(new Date());
  5. System.out.println(objects3);