Lambda表达式

Lambda表达式

  • λ希腊字母表中排序第十一位的字母, 英语名称为Lambda

  • 避免匿名内部类定义过多

  • 其实质属于函数式编程的概念

Function Interface(函数式接口)

理解Functional Interface (函数式接口)是学习Java8 lambda表达式的关键所在。

函数式接口的定义:

任何接口,如果只包含唯一个抽象方法,那么它就是一个函数式接口。

public interface Runnable {
public abstract void run();
}

对于函数式接口, 我们可以通过lambda表达式来创建该接口的对象。

//推导Lambda表达式
public class TestLambda {

    //3.静态内部类
    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();

        Like2 like2 = new Like2();
        like2.lambda();

        //4.局部内部类
        class Like3 implements ILIke {
            @Override
            public void lambda() {
                System.out.println("I like Lambda3!");
            }
        }

        Like3 like3 = new Like3();
        like3.lambda();

        //5.匿名内部类,没有类的名称,必须借助接口或者父类
        like = new ILIke() {

            @Override
            public void lambda() {
                System.out.println("I like Lambda4!");
            }
        };

        like.lambda();

        //6.用Lambda简化
        like = () -> {
            System.out.println("I like Lambda5!");
        };
        like.lambda();
    }
}

//1.定义一个函数式接口  只包含一个方法
interface ILIke {
    void lambda();
}

//2.接口实现类
class Like implements ILIke {
    @Override
    public void lambda() {
        System.out.println("I like Lambda!");
    }
}

为什么要使用lambda表达式

  • 避免匿名内部类定义过多
  • 可以让你的代码看起来很简洁
  • 去掉了一堆没有意义的代码,只留下核心的逻辑。

Lambda表达式简化

public class TestLambda2 {

    public static void main(String[] args) {
        Love love = null;

        love = (int a) -> {
            System.out.println("I love you " + a);
        };
        love.Lambda(1);

        //简化1:参数类型
        love = (a) -> {
            System.out.println("I love you " + a);
        };
        love.Lambda(2);

        //简化2:简化括号
        love = a-> System.out.println("I love you " + a);

        love.Lambda(5);
    }

}

interface Love {
    void Lambda(int a);
}

总结:

使用Lambda表达式的前提是接口只能为函数式接口

Lambda表达式如果只有一行代码则可以去掉花括号,如果有多行代码,则必须使用代码块包裹(花括号)

Lambda表达式的参数类型可以省略,如果有多个参数,要省略必须一起省略,而且得用括号包裹

posted @ 2020-10-21 21:14  GodTao  阅读(122)  评论(0)    收藏  举报