Java的Lambda表达式详解(参考On Java8)


编程是美的,在处理复杂程序时,往往是考虑一个程序员优雅写代码的能力,虽然都能实现同一个功能,但是有经验的程序猿往往能写出易于维护,易于理解,更加优雅的的程序。
在使用Java的过程中,经常会用到一些东西,但是又没有必要专门为这个东西创建一个类或者函数,或者这个东西只用到一次,不需要专门去定义。 这时候出现了匿名类和匿名函数,使得代码更为优雅。 匿名类这里不做讨论,现在讨论的是匿名函数,即Lambda表达式。

实际意义:

通过直接使用接口来产生一个函数,省略中间创建类作为中转的情况。

基本格式

格式1:

(interface) a = (参数)->表达式

格式2:

(interface) a =(参数)->{表达式;}

注意点:
1.格式1只能有一个语句,默认该语句的结果作为返回值,不能存在return;格式2可以有多个返回值,必须存在return。

3.虽然Lambda 表达式产生函数,但是实际上在 JVM中,一切都是一个类,JVM会自动产生类进行中转,但是代码看起来就比较简洁。

用法说明

Lambda用于:
在这里插入图片描述
接口只有一个函数,但是为了使用该函数,不得通过类来实例化该接口(如红色线条所示)。但是为了简化代码,实际上没有必要实例化Add类,可以通过接口直接使用该函数,这就是Lambda函数的由来(图中黑色箭头所示)。
用法1:
需要在当前类使用addable的函数。

package Test;

//申明一个接口,接口只有一个函数申明
interface addable{
    int add(int a, int b);
}

public class Main{
    public static void main(String[] args) {
        //用Lambda定义函数体,默认定义add方法
        addable addTest = (a,b) -> a+b ;
        //调用该接口的add方法
        System.out.println(addTest.add(1,2));
    }
}

用法2:
向函数中传入匿名函数作为参数

package Test;

interface addable{
    int add(int a, int b);
}

public class Main{
    public static void main(String[] args) {
        //传入匿名Lambda函数
        int sum = addTest((a,b)->a+b);
        System.out.println(sum);
    }
    public static int addTest(addable addTest){
        //相当于C++的函数指针,可以直接通过该接口调用add方法
        return addTest.add(1,2);
    }
}

总结:

总的来说,就是采用lambda来在代码层面跳过实例类,直接实例化函数,来增加代码的可读性和优雅性(实际上JVM还是创建了类)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值