- 1. 定义
- 2. 举例
- 2.1 定义一个函数式接口。
- 2.2 定义接收`函数式接口`类型参数的方法
- 2.3 调用
- 3. Java8自带的一些函数式接口
- 3.1. Java8实战 —— 表3-2 Java 8中的常用函数式接口
- 3.2. Java8实战 —— 表3-3 Lambdas及函数式接口的例子
- 4. 参考资料
- 你可以在函数式接口上使用Lambda表达式。也可以将它作为变量传递。
1.1. Lambda表达式可以赋给一个变量 (类型为:函数式接口)
1.2. Lambda表达式可以传递给一个接受函数式接口作为参数的方法 - 函数式接口就是只定义了一个抽象方法的接口。
2.1. 我们可以粗略的将函数式接口中的那个抽象方法,理解成Lambda表达式的函数声明(函数描
述符)。至此Lambda要接收几个参数,返回什么类型就都明了了。
2.2. 至于为什么只能是一个抽象方法。很简单嘛,直接看2.2。你要是接口里有两方式,鬼知道用哪个?
@FunctionalInterface不强制,但建议加上。它表示这是一个函数式接口。类似于用@Override来标示重写。
@FunctionalInterface
public interface NameFormat{
String format(String str);
}
2.2 定义接收函数式接口类型参数的方法
定义一个方法,它可以接收函数式接口类型的参数
public void showName(String name, NameFormat f){
System.out.println(f.format(name));
}
2.3 调用
调用时,我们可以根据需要,将格式化的逻辑代码以Lambda表达式的形式传进来。
Hero hero = new Hero();
hero.showName("笨笨", name -> "耀眼的" + name);
Hero hero = new Hero();
NameFormat nf = name -> "最最最爱你的" + name;
hero.showName("笨笨", nf);
3. Java8自带的一些函数式接口
大多数情况直接用就行了,实在无法满足需求,还可以自定义嘛。
3.1. Java8实战 —— 表3-2 Java 8中的常用函数式接口| 函数式接口 | 函数声明 | 针对基础类型的优化版 |
|---|---|---|
| Predicate | T->boolean | IntPredicate LongPredicate DoublePredicate |
| Consumer | T->void | IntConsumer LongConsumer DoubleConsumer |
| Function | T->R | IntFunction IntToDoubleFunction IntToLongFunction LongFunction LongToDoubleFunction LongToIntFunction DoubleFunction ToIntFunction ToDoubleFunction ToLongFunction |
| Supplier | ()->T | BooleanSupplier IntSupplier LongSupplier DoubleSupplier |
| UnaryOperator | T->T | IntUnaryOperator LongUnaryOperator DoubleUnaryOperator |
| BinaryOperator | (T,T)->T | IntBinaryOperator LongBinaryOperator DoubleBinaryOperator |
| BiPredicate | (L,R)->boolean | |
| BiConsumer | (T,U)->void | ObjIntConsumer ObjLongConsumer ObjDoubleConsumer |
| BiFunction | (T,U)->R | ToIntBiFunction ToLongBiFunction ToDoubleBiFunction |
| 使用案例 | Lambda 例子 | 对应的函数式接口 |
|---|---|---|
| 布尔表达式 | (List | Predicate
|
| 创建对象 | () -> new Apple(10) | Supplier |
| 消费一个对象 | (Apple a) -> System.out.println(a.getWeight()) | Consumer |
| 从对象获取属性 | (String s) -> s.length() | Function ToIntFunction |
| 合并两个值 | (int a, int b) -> a * b | IntBinaryOperator |
| 比较两个对象 | (Ap a1, Ap a2) -> a1.getWeight().compareTo(a2.getWeight()) | Comparator 或 BiFunction 或 ToIntBiFunction |
Java8自带的一些函数式接口



