java多线程学习笔记四——Lambda表达式

Lambda表达式

为什么使用Lambda表达式

  • 避免匿名内部类定义过多
  • 可以让你的代码看起来简洁
  • 去掉了一堆没有意义的代码,只留下核心的逻辑
    也许你会说,Lambda表达式不仅不简洁,还看起来更乱。那是因为还没有用习惯,习惯了,Lambda表达式则会看起来很简洁

要理解Lambda表达式,首先要理解Functional Interface(函数式接口)是学习java8 lambda表达式的关键所在。

函数式接口的定义:

  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。比如:
public interface Runnable(){
  public abstract void run();
}
  • 对于函数式接口,我们可以通过lambda表达式来创建该接口对象

函数式接口实现的简化过程

创建外部类实现接口

代码如下:

package com.Thread;
/*
推导lambda表达式
 */
public class Testlambda1 {

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

//1.定义一个函数式接口
interface ILike{
    void lambda();
}

//2.外部实现类
class Like implements ILike{
    @Override
    public void lambda() {
        System.out.println("I like lambda1");
    }
}

运行结果:

从以上代码中,我们定义了外部类实现了函数式接口,但为了方便,我们将实现类定义类里面。

创建静态内部类实现接口

package com.Thread;
/*
推导lambda表达式
 */
public class Testlambda1 {
    //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();

        like = new Like2();
        like.lambda();
    }
}

//1.定义一个函数式接口
interface ILike{
    void lambda();
}

//2.外部实现类
class Like implements ILike{
    @Override
    public void lambda() {
        System.out.println("I like lambda1");
    }
}

运行结果:

以上代码中,我们通过定义静态内部类,为了更加简便,我们可以定义局部内部类。

创建局部静态类实现接口

package com.Thread;
/*
推导lambda表达式
 */
public class Testlambda1 {
    //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();

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

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

        like = new Like3();
        like.lambda();
    }
}

//1.定义一个函数式接口
interface ILike{
    void lambda();
}

//外部实现类
class Like implements ILike{
    @Override
    public void lambda() {
        System.out.println("I like lambda1");
    }
}

运行结果:

以上我们就定义了局部内部类,而为了更简化实现方式,我们还可以使用匿名内部类

匿名内部类

package com.Thread;
/*
推导lambda表达式
 */
public class Testlambda1 {
    //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();

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

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

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

        //5.匿名内部类,没有类的名称,必须借助接口或者父类
        like = new ILike() {
            @Override
            public void lambda() {
                System.out.println("I like lambda4");
            }
        };
        like.lambda();
    }
}

//1.定义一个函数式接口
interface ILike{
    void lambda();
}

//外部实现类
class Like implements ILike{
    @Override
    public void lambda() {
        System.out.println("I like lambda1");
    }
}

运行结果:

为了更进一步简化,下面就是使用lambda表达式实现函数式接口的方式

lambda表达式实现接口

package com.Thread;
/*
推导lambda表达式
 */
public class Testlambda1 {
    //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();

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

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

        like = new Like3();
        like.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();
}

//外部实现类
class Like implements ILike{
    @Override
    public void lambda() {
        System.out.println("I like lambda1");
    }
}

运行结果:

posted @ 2021-09-23 22:00  爱思考的L  阅读(84)  评论(0)    收藏  举报