- Lambda表达式是Java8引入的一个重要特性
- Lambda表达式可以被视为匿名函数
- 允许在需要函数的地方以更简洁的方式定义功能
1.定义三个接口(多个参数,单个参数,无参数)
interface MyInterface {int sum(int i, int j);
}interface MyHeHe {int hehe(int i);
}interface MyHaHa {int haha();
}
2.通常我们需要自己写实现类在方法中创建实现类对象,或者创建匿名实现类
class MyInterfaceImpl implements MyInterface {@Overridepublic int sum(int i, int j) {return i + j;}
}// 1.自己创建实现类对象
MyInterfaceImpl myInterface = new MyInterfaceImpl();
System.out.println(myInterface.sum(1, 2));
// 2.创建匿名实现类
MyInterface myInterface1 = new MyInterface() {@Overridepublic int sum(int i, int j) {return i + j;}
};
System.out.println(myInterface1.sum(1, 2));
3.使用Lambda表达式
// 3.Lambda表达式 参数列表+箭头+方法体
MyInterface myInterface2 = (int i, int j) -> {return i + j;
};
System.out.println(myInterface2.sum(1, 2));
// 4.简化写法1:参数类型可以不写,只写参数名,且参数名可改变
MyInterface myInterface3 = (x, y) -> {return x + y;
};
System.out.println(myInterface3.sum(1, 2));// 5.简化写法2:当没有参数时,可只写()
MyHaHa myHaHa = () -> {return 3;
};
System.out.println(myHaHa.haha());// 6.简化写法3:当参数只有一个时,可省去()只写参数名
MyHeHe myHeHe = i -> {return i + 2;
};
System.out.println(myHeHe.hehe(1));// 7.简化写法4:方法体如果只有一句话,{}也可以省略
MyHeHe myHeHe1 = i -> i+2;
System.out.println(myHeHe1.hehe(1));
4.补充说明
- 使用Lambda表达式可以简化函数式接口(接口中有且只有一个未实现的方法,该接口就是函数式接口)
- 使用官方注解@FunctionalInterface可以检查该接口是否为函数式接口