Lambda表达式推导

前言

Lambda (λ)希腊字母表的第11个字母
读音:lan b(m) da(兰亩达)['læ;mdə])
基于数学中的λ演算而得名lambda表达式


一、Lambda简介

java的Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
函数里式接口时学习lambda表达式的关键所在。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
其实质属于函数式编程的概念。

二、Lambda表达式的优点

避免内部类定义过多。
可以让你的代码看起来很简洁
去掉了一些没有意义的代码,只留下了核心的逻辑


既然lambda有这么多的好处 那就不要这些有的没的,直接上代码

三、Lambd表达式的推导过程

1.实现类方式

代码如下(示例):

public class LambdaExpression {
    public static void main(String[] args) {
        HelloImpl hello = new HelloImpl();
        hello.say();
    }
}

interface Hello {
    void say();
}
//实现类
class HelloImpl implements Hello {

    public void say() {
        System.out.println("hello");
    }
}

2.静态内部类

代码如下(示例):

public class LambdaExpression {
    //静态内部类
    static class HelloImpl implements Hello {
        public void say() {
            System.out.println("hello");
        }
    }

    public static void main(String[] args) {
        HelloImpl hello = new HelloImpl();
        hello.say();
    }
}

interface Hello {
    void say();
}

3.局部内部类

代码如下(示例):

public class LambdaExpression {
    public static void main(String[] args) {
    	//局部内部类
        class HelloImpl implements Hello {
            public void say() {
                System.out.println("hello");
            }
        }
        HelloImpl hello = new HelloImpl();
        hello.say();
    }
}

interface Hello {
    void say();
}

4.匿名内部类

代码如下(示例):

public class LambdaExpression {
    public static void main(String[] args) {
    	//匿名内部类
        Hello hello = new Hello() {
            public void say() {
                System.out.println("hello");
            }
        };
    }
}

interface Hello {
    void say();
}

5.Lambda表达式

接口中值存在一个方法,所以实现类必须实现该方法,所以参照以上的匿名内部类其中new部分以及方法名都是多余的代码 所以省略,就有了以下代码(示例):


public class LambdaExpression {
    public static void main(String[] args) {
        Hello hello = ()->{
            System.out.println("hello");
        };
    }
}

interface Hello {
    void say();
}

6.Lambda表达式进一步的精简(参数类型)

如果方法存在参数,再编写lambda表达式可以省略参数的类型,代码如下(示例):


public class LambdaExpression {


    public static void main(String[] args) {
    	//精简了参数类型
        Hello hello = (name)->{
            System.out.println(name + "say hello");
        };
    }
}

interface Hello {
    void say(String name);
}

7.Lambda表达式进一步的精简(括号)

如果方法存在参数,再编写lambda表达式可以省略参数的类型,代码如下(示例):

public class LambdaExpression {
    public static void main(String[] args) {
    	//精简了小括号 参数类型
        Hello hello = name -> {
            System.out.println(name + " say hello");
        };
        hello.say("macrocsom");
    }
}

interface Hello {
    void say(String name);
}

8.Lambda表达式进一步的精简(花括号)

如果方法存在参数,再编写lambda表达式可以省略参数的类型,代码如下(示例):

public class LambdaExpression {
    public static void main(String[] args) {
    	//精简了参数类型,小括号,花括号
        Hello hello = name -> System.out.println(name + " say hello");
        
        hello.say("macrocsom");
    }
}

interface Hello {
    void say(String name);
}

四、注意事项

  • lambda表达式只有一行的时候才能简化成最精简的模式,如果有多行,就要使用代码块
  • 接口为函数式接口
  • 去掉括号的精简方式只能为一个参数
  • 多个参数也可以去掉参数类型,要去掉都去掉

五、写在最后

一个正在学习的程序猿,有什么错误的地方欢迎大家指正
为了诗和远方的门票,努力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值