文章导航
JDK 8 函数式编程最佳实践
1. Lambda表达式的重要接口
1.1 新增的函数接口
主要指的是java.util.function包中的函数接口。
函数式接口:只含一个方法定义的接口。函数式接口能够定义一个Lambda表达式的类型。Lambda表达式实际是将特定形式的入参和返回值进行了抽象。
主要的抽象类型:
- Consumer:有一个入参,没有返回值
- Supplier:没有入参,有返回值
- Function:有一个入参,也有返回值
由此衍生来的常用抽象类型:
- Predicate:有一个入参,返回值为Boolean
- BiConsumer:有两个入参,没有返回值
- BiFunction:有两个入参,有返回值
- UnaryOperator:Function的特殊情况,入参和返回值类型相同
- BinaryOperator:BiFunction的特殊情况,两个入参和返回值的类型都相同
- Double,Integer以及Long的类型为primitive的各种特殊形式
根据这个定义,JDK中原来含有一个方法定义的接口都能够被上述的函数式接口进行抽象。
1.1 无参数,无返回值类型接口
典型的比如Runnable接口,定义一个Runnable实例不再需要使用匿名类的方式,直接使用Lambda表达式:
Runnable runnable = () -> {
System.out.println("runnable");
};
实际上任何满足无入参,无返回值的方法都可以被引用成为一个Lambda表达式,然后赋值给一个Runnable实例:
Runnable testStatic = Test::testStaticRunnable;
private static void testStaticRunnable() {
System.out.println("runnable in static");
}