Lambda表达式的逐步简化过程,超详细,干货

JDK1.8 Lambda表达式

为什么要用Lambda表达式?

  • 避免内部类定义过多
  • 让代码看起来更整洁
  • 去掉一堆没有意义的代码,只留下核心逻辑

Functional Interface(函数式接口)

  • 理解函数式接口是学习Java8,Lambda表达式的关键
  • 函数式接口的定义:
    • 任何接口如果只包含唯一一个抽象方法,那么它就是一个函数式接口
    • 对于函数式接口,我们可以通过Lambda表达式来创建该接口的对象。
package com.thread.lambdaTest;
/*
* 推导Lambda表达式
*   注释的序号,是一个逐步简化的过程
*   1.定义一个函数式接口
*   2.用实现类实现接口
*   3.用静态内部类实现接口
*   4.用局部内部类实现接口
*   5.用匿名内部类实现接口
*   6.用lambda表达式简化实现接口
* */

//1.定义一个函数式接口
interface Love{
    void showLove();
}
//2.实现类
class Person implements Love{
    @Override
    public void showLove() {
        System.out.println("I love you");
    }
}

public class LambdaTest {
    //3.静态内部类
    static class Person2 implements Love{
        @Override
        public void showLove() {
            System.out.println("I love you 2");
        }
    }
    public static void main(String[] args) {
        //4.局部内部类
        class Person3 implements Love{
            @Override
            public void showLove() {
                System.out.println("I love you 3");
            }
        }
        //5.匿名内部类,没有类的名称,必须借助接口或者父类
        Love love4 = new Love() {
            @Override
            public void showLove() {
                System.out.println("I love you 4");
            }
        };

        //6.用lambda表达式简化
        Love love5 = ()->{
            System.out.println("I love you 5");
        };

        //测试实现类输出
        Love love = new Person();
        love.showLove();
        //测试静态内部类输出
        Love love2 = new Person2();
        love2.showLove();
        //测试局部内部类输出
        Love love3 = new Person3();
        love3.showLove();
        //测试匿名内部类输出
        love4.showLove();
        //测试lambda表达式简化后输出
        love5.showLove();
    }
}

对于lambda表达式的简化

package com.thread.lambdaTest;
/*
* 继续简化lambda表达式
* */
//还是先定义接口
interface Kiss{
    void kissYou(String name);
}
public class LambdaTestTwo {
    public static void main(String[] args) {
        //初始态
        Kiss kiss = (String name)->{
            System.out.println("I want to kiss you "+name);
        };
        kiss.kissYou("漂亮");
        //简化方式一:参数类型 (两种写法:一种写在参数括号内部(只限单参数);另一种在参数括号外部)
        Kiss kiss2 = (name -> {
            //括号内
            System.out.println("I want to kiss you "+name);
        });
        kiss2.kissYou("漂亮X2");

        kiss2 = (name)->{
            //括号外
            System.out.println("I want to kiss you "+name);
        };
        kiss2.kissYou("漂亮X2.1");

        //简化方式二:简化参数括号
        Kiss kiss3 = name -> {
            System.out.println("I want to kiss you "+name);
        };
        kiss3.kissYou("漂亮X3");

        //简化方式三:简化代码外层花括号
        Kiss kiss4 = name -> System.out.println("I want to kiss you "+name);
        kiss4.kissYou("漂亮X4");
    }
}

总结注意:

  • 如若使用lambda表达式,必须保证接口是函数式接口(即该接口只有一个方法)

  • 在对lambda表达式的简化方式一中,在参数括号内的写法,如果有大于一个以上的参数时,会报错。请使用括号外写法

  • 简化方式三中,在只有一行代码的情况下可以缩减为一行。如果有多行代码,请使用简化方式一或二,用代码块包裹。

  • 在有多个参数的情况下,也可以去掉参数类型。如果去掉,就都去掉。前提是所有参数必须写在括号内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值