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体的操作,已经有实现的方法了,可以使用方法引用! (实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!)
方法引用:使用操作符 “::” 将方法名和对象或类的名字分隔开来。
如下三种主要使用情况:
- 对象::实例方法
- 类::静态方法
- 类::实例方法
Arrays.asList("gaox", "gaoxizhi").stream().forEach((x) -> System.out.println(x));
Arrays.asList("gaox", "gaoxizhi").stream().forEach(System.out::println);
BinaryOperator<Double> dbo = (x, y) -> Math.pow(x, y);
BinaryOperator<Double> bo = Math::pow;