Lambda表达式是Java 8
提供的新特性之一,是功能性接口的简单实现。
Lambda表达式特别适合语句就是一行的情况
功能性接口
只有一个方法的接口称之为功能性接口
如:
interface Car{
int test(int a,int b);
}
完整代码
public class TestLambda {
public static void main(String[] args) {
//实现功能性接口
Car car=new Car() {
@Override
public int test(int a, int b) {
return a+b;
}
};
System.out.println(car.test(1, 2));
}
}
//功能性接口
interface Car{
int test(int a,int b);
}
运行结果
3
利用Lambda实现功能性接口
语法
Car car=(int a,int b)->{return a+b;};
基本语法
()->{}
如果Java编译器能猜到参数类型,则类型可以省略
Car car2=(a,b)->{return a+b;};
如果{}中只有一行语句则{}可以省略,如果是return语句,则一起省略return
Car car3=(a,b)->a+b;
如果只有一个参数则()可以省略
Car car4=a->a+3;
最简单的例子
package lambdaDemo;
public class TestLambda {
public static void main(String[] args) {
//实现功能性接口
Car car=(int a,int b)->{return a+b;};
System.out.println(car.test(1, 2));
}
}
//功能性接口
interface Car{
int test(int a,int b);
}
运行结果
3
稍微复杂一点
package lambdaDemo;
public class TestLambda {
public static void main(String[] args) {
//Lambda实现功能性接口
Car car=(int a,int b)->{return a+b;};
System.out.println(car.test(1, 2));
//如果Java编译器能猜到参数类型,则类型可以省略
Car car2=(a,b)->{return a+b;};
System.out.println(car2.test(1, 2));
//如果{}中只有一行语句则{}可以省略,如果是return语句,则一起省略return
Car car3=(a,b)->a+b;
System.out.println(car3.test(1, 2));
//如果只有一个参数则()可以省略
Truck truck=a->a+3;
System.out.println(truck.test(1));
}
}
//功能性接口
interface Car{
int test(int a,int b);
}
interface Truck{
int test(int a);
}
运行结果
3
3
3
4
package lambdaDemo2;
public class TestLambda2 {
public static void main(String[] args) {
//使用Lambda作为参数
test((a,b)->a+b);
//相当于
Car car=(a,b)->a+b;
test(car);
//使用Lambda作为参数
test(a->a+4);
//相当于
Truck truck=a->a+4;
test(truck);
}
public static void test(Car car){
System.out.println("TestLambda.test(Car car)");
System.out.println(car.test(1, 2));
}
public static void test(Truck truck){
System.out.println("TestLambda.test(Truck truck)");
System.out.println(truck.test(6));
}
}
//功能性接口
interface Car{
int test(int a,int b);
}
interface Truck{
int test(int a);
}
运行结果
TestLambda.test(Car car)
3
TestLambda.test(Car car)
3
TestLambda.test(Truck truck)
10
TestLambda.test(Truck truck)
10
网友评论