Lambda首先要了解接口函数和匿名函数这两个概念。
接口函数
接口函数指的是一个只包含一个抽象方法的接口(可以包含default方法和static方法),我们可以用注解@FunctionalInterface来标注一个接口函数,它会自动帮你检查这个接口是否满足接口函数的定义。
匿名函数
匿名函数指的是没有方法名的函数。
Runnable run = () -> {}/expression;
在->左边是参数,参数个数任意,可以不用写参数类型,如果只有一个参数可以省去括号;
->右边是要执行的代码,称为Lambda体
Lambda
具体的使用方法如下
- 无参数无返回
Runnable run = () -> System.out.println();
new Thread(run).start();
- 一个参数无返回
//after java8 we can find functional interface Consumer in java.util.function
Consumer<Integer> consumer = (a) -> System.out.println(a);
//accept is an abstract method in Interface Consumer
consumer.accept(a);
- 有一个参数有返回值
Function<String,Integer> function = (a) -> {
Integer value = Integer.parseInt(a);
return value;
}
function.apply("2333");
- 多个参数一个返回值
BiFunction<Integer,Integer,String> biFunction = (a,b) -> a+b+"";
biFunction.apply(1,2);
我们可以发现,Lambda的使用必需对应一个函数接口,如果每次使用Lambda都需要定义新的接口,那么就不能达到精简代码的目的。Java8提供了package java.util.function,里面有很多的函数接口可以直接使用。