Loading

Lambda表达式

一、函数式接口

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

    public interface ILike {
        void lambda();
    }
    
  2. 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。

二、推导Lambda表达式

  1. 静态内部类

    public class Lambda {
        static class Like extends ILike {
            @Override
            public void lambda() {
                System.out.println("i like lambda");
            }
        }
    
        public static void main(String[] args) {
            ILike iLike = new Like();
            iLike.lambda();
        }
    }
    
  2. 局部内部类

    public class Lambda {
        public static void main(String[] args) {
            class Like extends ILike {
                @Override
                public void lambda() {
                    System.out.println("i like lambda");
                }
            }
    
            ILike iLike = new Like();
            iLike.lambda();
        }
    }
    
  3. 匿名内部类

    public class Lambda {
        public static void main(String[] args) {
            ILike like = new ILike() {
                @Override
                public void lambda() {
                    System.out.println("i like lambda匿名内部类");
                }
            };
            like.lambda();
        }
    }
    
  4. Lambda表达式

    public class Lambda {
        public static void main(String[] args) {
            ILike iLike = () -> {System.out.println("Lambda表达式!");};
            iLike.lambda();
        }
    }
    

三、为什么要使用Lambda表达式

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

举例

public class TestLambda {
    public static void main(String[] args) {
        Ilove love = (boolean k) -> {System.out.println("i love you is -> " + k);};
        love.lova(true);
        // 多个参数,类型要去掉都去掉
        Ilove love1 = (k) -> {System.out.println("i love you is -> " + k);};
        love1.lova(true);
        // 多个参数类型,必须用括号包裹
        Ilove love2 = k -> {System.out.println("i love you is -> " + k);};
        love2.lova(true);
        // 只有一行代码时可以去掉代码块,如果有多行,那么就用代码块包裹
        Ilove love3 = k -> System.out.println("i love you is -> " + k);
        love3.lova(true);
    }
}

interface Ilove {
    void lova(boolean k);
}
posted @ 2021-01-11 22:26  Zzxij  阅读(77)  评论(0)    收藏  举报