lambda 表达式。

99 阅读1分钟

深化过程 。

去掉了一堆没有意义的代码 ,让代码更简洁。

前提条件 ,函数式接口。

一 从最原始的方法说起。

package com.company;

public class TestLambda {

    public static void main(String[] args) {
        ILike like = new Like();
        like.lambda();
    }
}


interface ILike {
    void lambda();
}

class Like implements ILike{

    public void lambda() {
        System.out.println("Like");
    }
}

image.png

二 演化到静态内部类写法。

package com.company;

public class TestLambda {


    static class Like2 implements ILike {
        public void lambda() {
            System.out.println("Like2.lambda");
        }
    }

    public static void main(String[] args) {
        ILike obj = new Like2();
        obj.lambda();
    }
}


interface ILike {
    void lambda();
}

三 局部内部类实现

package com.company;

public class TestLambda {


    public static void main(String[] args) {
        //局部类用法。        
        class Like3 implements ILike {
            @Override
            public void lambda() {
                System.out.println("Like3.lambda");
            }
        }
        
        ILike obj = new Like3();
        obj.lambda();
    }
}


interface ILike {
    void lambda();
}

四内部匿名类

package com.company;

public class TestLambda {


    public static void main(String[] args) {
        //匿名内部用法。
        ILike obj = new ILike() {
            @Override
            public void lambda() {
                System.out.println("like4.lambda");
            }
        };
        obj.lambda();
    }
}


interface ILike {
    void lambda();
}

进一步烟花至 lambda

package com.company;

public class TestLambda {


    public static void main(String[] args) {
        //匿名内部用法。
        /*
        ILike obj = new ILike() {
            @Override
            public void lambda() {
                System.out.println("like4.lambda");
            }
        };

         */
        ILike obj = ()-> System.out.println("like4.lambda");
        obj.lambda();
    }
}


interface ILike {
    void lambda();
}

就是糖。 要习惯。 image.png

练习下手感。

再写一个,熟悉下手感 。

package com.company;

public class TestLambda {


    public static void main(String[] args) {
        //匿名内部用法。
        ILove obj = (int a) -> System.out.println("I love" + a);
        obj.love(3 );
    }
}

interface ILove {
    void love(int a);
}

多写一个,去掉 参数的括号。

package com.company;

public class TestLambda {
    public static void main(String[] args) {
        //匿名内部用法。
        ILove obj = (int a) -> System.out.println("I love" + a);
        obj.love(3 );

        ILove obj2 = a -> System.out.println("I love2  " + a);
        obj2.love(3 );

    }
}

interface ILove {
    void love(int a);
}

总结,去掉平时写得很烦的东西。约定大于配置。

注意条件 ,实现只有一个方法的接口。(函数式接口。) 可以去掉参数的类型。