1. Java 内置四大核心函数式接口

函数式接口 接口类型 参数类型 返回值类型 用途 包含方法
Consumer 消费型 T void 对类型为T的对象应用操作 void accept(T t)
Supplier 供给型 T 返回类型为T的对象 T get()
Function 函数型 T R 对类型为T的对象应用操作,并返回结果。结果是R类型的对象 R apply(T t)
Predicate 断定型 T R 确定类型为T的对象是否满足某约束,并返回 boolean 值 boolean test(T t)

2. 其他类型函数式接口

函数式接口 父接口类型 参数类型 返回值类型 用途 包含方法
BiFunction T, U, R R 对类型为 T, U 参数应用操作,返回 R 类型的结果 R apply(T t, U u)
UnaryOperator Function T T 对类型为T的对象进行一元运算,并返回T类型的结果 T apply(T t)
BinaryOperator BiFunction T, T T 对类型为T的对象进行二元运算,并返回T类型的结果 T apply(T t1, T t2)
BiConsumer T, U void 对类型为T, U 参数应用操作 void accept(T t, U u)
ToIntFunction
ToLongFunction
ToDoubleFunction

T int
long
double
分别计算int、long、 double、值的函数
IntFunction
LongFunction
DoubleFunction
int
long
double
R 参数分别为int、long、 double 类型的函数

3. 方法引用

当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用! (实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!)

方法引用:使用操作符 “::” 将方法名和对象或类的名字分隔开来。
如下三种主要使用情况:

  1. 对象::实例方法
  2. 类::静态方法
  3. 类::实例方法
  1. Arrays.asList("gaox", "gaoxizhi").stream().forEach((x) -> System.out.println(x));
  2. Arrays.asList("gaox", "gaoxizhi").stream().forEach(System.out::println);
  3. BinaryOperator<Double> dbo = (x, y) -> Math.pow(x, y);
  4. BinaryOperator<Double> bo = Math::pow;