JAVA Lambda表达式详细讲解

JAVA Lambda表达式详细讲解


一、Lambda 表达式介绍

1.Lambda 是什么?

Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
在 Java 语言中,可以为变量赋予一个值。
在这里插入图片描述
能否把一个代码块赋给一变量吗?
在这里插入图片描述
在 Java 8 之前,这个是做不到的。但是 Java 8 问世之后,利用 Lambda 特性,就可以做
到了。
在这里插入图片描述
甚至我们可以让语法变得更简洁。
在这里插入图片描述
这样,我们就成功的非常优雅的把“一块代码”赋给了一个变量。而“这块代码”,或者说“这个被赋给一个变量的函数”,就是一个 Lambda 表达式。但是这里仍然有一个问题,就是变量 aBlockOfCode 的类型应该是什么?
在 Java 8 里面,所有的 Lambda 的类型都是一个接口,而 Lambda 表达式本身,也就是” 那段代码“,需要是这个接口的实现。这是我认为理解 Lambda 的一个关键所在,简而言之
就是,Lambda 表达式本身就是一个接口的实现。直接这样说可能还是有点让人困扰,我们
继续看看例子。我们给上面的 aBlockOfCode 加上一个类型:
在这里插入图片描述
这种只有一个接口函数需要被实现的接口类型,我们叫它”函数式接口“。为了避免后来的人在这个接口中增加接口函数导致其有多个接口函数需要被实现,变成"非函数接口”,我们可以在这个上面加上一个声明@FunctionalInterface, 这样别人就无法在里面添加新的接口函数了。
在这里插入图片描述

2.Lambda有什么用呢?

最直观的作用就是使得代码变得异常简洁。
在这里插入图片描述

3.接口要求

虽然使用 Lambda 表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用 Lambda 表达式来实现。Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法。
jdk 8 中有另一个新特性:default, 被 default 修饰的方法会有默认实现,不是必须被实现的方法,所以不影响 Lambda 表达式的使用。

4.@FunctionalInterface 注解作用

@FunctionalInterface 标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口。

二、Lambda 表达式语法

1.语法结构

在这里插入图片描述
语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda 运算符 ,读作(goes to)。

2.Lambda 表达式的重要特征

可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

3.Lambda 案例

在这里插入图片描述

三、Lambda表达式入门案例

1.定义函数接口

//Lambda表达式入门案例_定义函数接口
//无返回值,无参数
@FunctionalInterface
interface NoReturnNoParam{
   
    void method();
}

//无返回值,有一个参数
@FunctionalInterface
interface NoReturnOneParam{
   
    void method(int a);
}

//无返回值,有多个参数
@FunctionalInterface
interface NoReturnMultiParam{
   
    void method(int a,int b);
}

//有返回值,无参数
@FunctionalInterface
interface ReturnNoParam{
   
    int method();
}

//有返回值,有一个参数
@FunctionalInterface
interface ReturnOneParam{
   
    int method(int a);
}

//有返回值,有多个参数
@FunctionalInterface
interface ReturnMultiParam{
   
    int method(int a,int b);
}

public class Test {
   
}

2.实现函数接口

public class Test {
   
    //Lambda表达式入门案例_实现函数接口
    public static void main(String[] args) {
   
        //实现无返回值,无参数接口
        NoReturnNoParam noReturnNoParam = ()->{
   
            System.out.println("NoReturnNoParam");
        };
        noReturnNoParam.method();

        //实现无返回值,有一个参数接口
        NoReturnOneParam noReturnOneParam = (int a)->{
   
            System.out.println("NoReturnOneParam  "+a);
        };
        noReturnOneParam.me
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值