λ 在希腊字母表中排序第十一位的字母,英语名称为 Lambda
避免匿名内部类定义过多
其实质属于函数式编程的概念
(params) -> expression [表达式]
(params) -> statement [语句]
(params) -> {statements}
避免匿名内部类定义过多
可以让你的代码看起来更简洁
去掉了一堆没有意义的代码,只留下了核心的逻辑
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
interface Runnable {
public abstract void run();
}
对于函数式接口,我们可以通过Lambda表达式来创建该接口的对象
- package test.Demo19;
- /**
- * @author 程家亮
- * @version 1.0
- */
- public class TestLambda1 {
- //1.静态内部类
- static class Like2 implements ILike{
- @Override
- public void lambda() {
- System.out.println("I like lambda2");
- }
- }
- public static void main(String[] args) {
- ILike like = new Like();
- like.lambda();
-
- //静态内部类
- like = new Like2();
- like.lambda();
-
-
- //2.局部内部类
- class Like3 implements ILike{
- @Override
- public void lambda() {
- System.out.println("I like lambda3");
- }
- }
-
- like = new Like3();
- like.lambda();
-
- //3.匿名内部类,没有类的名称,必须借助接口或者父类
- like = new ILike() {
- @Override
- public void lambda() {
- System.out.println("I like lambda4");
- }
- };
- like.lambda();
-
- //4.用lambda简化
- like = () -> {
- System.out.println("I like lambda5");
- };
- like.lambda();
- }
- }
- //函数式接口
- interface ILike{
- void lambda();
- }
- //实现类
- class Like implements ILike{
- @Override
- public void lambda() {
- System.out.println("I like lambda1");
- }
- }

lambda表达式只有一行代码的情况下才能去掉花括号简化成一行;如果有多行,那么就要用代码块包裹
前提是接口为函数式接口
多个参数也可以去掉参数类型,要去就都去掉,必须加上括号
- public class TestLambda2 {
- public static void main(String[] args) {
- //lambda表达式
- ILove love1 = (int a) -> {
- System.out.println("I love you--->"+a);
- };
- love1.love(520);
-
- //简化1:参数类型
- ILove love2 = (a) -> {
- System.out.println("I love you--->"+a);
- };
- love2.love(1314);
-
- //简化2:简化括号
- ILove love3 = a -> {
- System.out.println("I love you--->"+a);
- };
- love3.love(666);
-
- //简化3:简化花括号
- ILove love4 = a -> System.out.println("I love you--->"+a);
- love4.love(888);
- }
- }
-
- interface ILove {
- void love(int a);
- }
-
