Lambda表达式

suaxi
2020-11-25 / 0 评论 / 195 阅读 / 正在检测是否收录...

Lambda表达式(Jdk1.8之后出现)

  • λ希腊字母,英文名称为Lambda
  • 避免匿名内部类定义过多
  • 其本质是函数式编程
(params) ->expression[表达式]
(params) ->statement[语句]
(params) ->{statement}

例:

a->System.out.println("Lambda表达式测试-->"+a);
new Thread(()-> System.out.println("Lambda表达式测试")).start();

简化步骤实例:

定义函数式接口,实现类--->静态内部类--->局部内部类--->匿名内部类(逐步简化)

package com.lambda.demo01;

/**
 * @Author suaxi
 * @Date 2020/11/25 11:21
 */
public class TestLambda01 {

    //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();
}

//2、实现类
class Like implements ILike{

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

Lambda表达式总结:

package com.lambda.demo01;

/**
 * @Author suaxi
 * @Date 2020/11/25 16:24
 */
public class TestLambda02 {
    public static void main(String[] args) {
        DisLike disLike = null;
        /*//1、lambda表达式简化
        DisLike disLike = (int a) ->{
            System.out.println("lambda表达式测试"+a);
        };

        //简化1:参数类型
        disLike = (a) ->{
            System.out.println("lambda表达式测试"+a);
        };

        //简化2:简化括号
        disLike = a -> {
            System.out.println("lambda表达式测试"+a);
        };

        //简化3:去掉花括号
        disLike = a -> System.out.println("lambda表达式测试"+a);
        disLike.dlike(1);*/

        //多个参数时
        disLike = (a,b) ->{
            System.out.println("lambda表达式测试"+a);
            System.out.println("lambda表达式测试"+b);
        };
        disLike.dlike(1,2);

        //总结:
        //1、lambda表达式只有在一行代码的情况下才能简化为一行,如果有多行,则需用代码块包裹
        //2、函数式接口是前提
        //3、多个参数也可以去掉参数类型(要去掉就都去掉),有多个参数的时候不能像简化3一样去掉括号,
        // 单个参数时可以简化括号,多个参数时必须加上括号
    }
}

interface DisLike{
    void dlike(int a,int b);
}
0

评论 (0)

取消