Lambda表达式基本语法与底层实现

简介: Lambda表达式基本语法与底层实现

前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、Lambda的语法格式

(parameters)-> {statements;}

parameters : Java函数的参数列表

statements : 执行语句

-> : 表明使用指定参数去完成某个功能

代码如下(示例):

public class t1 {
    public int method(int a,int b){
        /* 下面是方法体 */
        return a+b;
    }
    
    (int a,int b) -> {return a + b;}
}

(parameters)-> expression

parameters : Java函数的参数列表

expression : 表达式

-> : 表明使用指定参数去完成某个功能

代码如下(示例):

public class t1 {
    public int method(int a,int b){
        /* 下面是方法体 */
        return a+b;
    }

    (int a,int b) -> {return a + b;}
    
    (int a,int b) -> a + b
}


以上就是最简答的Lambda表达式的形式展示

二、Lambda的语法格式进阶

代码如下(示例):

  // 1.当函数体只有一个语句可以省略大括号(大括号{}是可以选择的)
    (String msg) -> System.out.println("你好我是肌肉猿" + msg);

    // 2.当函数体只有一个参数,可以省略圆括号 同时省略类型(参数圆括号()也是可以选择的)
    msg -> System.out.println("你好我是肌肉猿" + msg);

    // 3.函数体只有一个表达式 省略return
    // 当函数体只有一个表达式 且运算结果匹配返回类型 return关键字可以省略
    (int a,int b) - > a + b

    // 4.省略参数类型 编译器可以自行进行推断
    (a, b) -> a + b

以上就是Lambda表达式的进阶版详细形式展示

三、Lambda的使用前提

1.必须有一个函数式接口(所谓的函数式接口就是只有一个抽象方法的接口,也成为SAM接口,即Single Abstract Method interfaces) 且 有且只有一个抽象方法的接口。

2.在Java8中为了保证函数式接口的正确性,引入一个新注解@FunctionalInterface,主要用于检查编译级别的错误,当你写的接口不符合函数式接口定义时,加上该注解编译器会报错。

四、常见的函数式接口

Runnable / Callable

Supplier / Consumer

Comparator

Predicate

Function

五、Lambda表达式的底层实现

1.Lambda表达式的本质就是函数式接口的匿名子类的匿名对象
2.Lambda表达式并不是JVM的基本语法,而是作为后期出现的一种语法糖

底层实现代码演示:

public class LambdaPrinciple {
    public static void main(String[] args) {
        List<String> strList = Arrays.asList("肌", "肉", "猿","爱", "写", "Java");
        // 通过lambda表达式实现元素遍历
        strList.forEach(s -> {
            System.out.println(s);
        });
    }
}
上述代码经过反编译jar包反编译之后:
public class LambdaPrinciple {
    public static void main(String[] args) {
        List<String> strList = Arrays.asList("\u808c", "\u8089", "\u733f", "\u7231", "\u5199", "Java");
        strList.forEach((Consumer<String>)LambdaMetafactory.metafactory
        (null, null, null, 
        (Ljava/lang/Object;)V,
         lambda$main$0(java.lang.String ),
          (Ljava/lang/String;)V)());
    }

    private static void lambda$main$0(String s) {
            System.out.println(s);
        }
}

从上述反编译的结果我们可以看出就是Lambda表达式在真正执行的时候还是转化为Consumer,通过main方法调用来输出。

总结:lambda表达式底层还是用匿名内部类实现,通过ASM技术(动态字节码技术)

相关文章
|
SQL 存储 Kubernetes
K8S搭建SQL server
K8S搭建SQL server
|
机器学习/深度学习 人工智能 自然语言处理
什么是 NLP (自然语言处理)?
NLP 的全称是 Natural Language Processing,翻译成中文称作:自然语言处理。它是计算机和人工智能的一个重要领域。顾名思义,该领域研究如何处理自然语言。
962 5
|
开发框架 运维 应用服务中间件
EDAS(Enterprise Distributed Application Service)
EDAS(Enterprise Distributed Application Service)是阿里云提供的一款企业级分布式应用服务平台,帮助企业快速构建、部署和管理分布式应用程序。EDAS提供了一系列的功能和工具,包括微服务架构、容器化部署、服务治理、流量控制、故障诊断等,可以帮助企业实现分布式应用的快速迭代和运维管理。
1772 0
|
9月前
|
SQL 存储 关系型数据库
MySQL 高频面试题
本课程深度解析阿里MySQL高频面试题,涵盖底层原理、索引优化、性能调优与故障排查四大核心模块。结合阿里实战场景,精讲MVCC、B+树、事务ACID、死锁处理、慢SQL定位、分库分表等关键技术点,提供可落地的优化方案与标准答案,助力掌握“原理+实战”双能力,精准应对高并发、大数据量下的数据库挑战,适合中高级开发者冲击大厂offer。
|
10月前
|
数据采集 人工智能 自然语言处理
2025年11月,中国数字人平台标准方案与全栈自研数字人技术
2025年,数字人产业迈向成熟,技术与场景深度融合。三类模式凸显:技术纵深派攻坚渲染与交互,场景深耕派布局政务金融,生态融合派打造虚实体验。数字人正成为连接物理与数字世界的智能枢纽。
|
9月前
|
域名解析 弹性计算 网络协议
阿里云国际站服务器独立ip有什么好处?独立ip怎么搭建?
阿里云国际站服务器独立ip有什么好处?独立ip怎么搭建?
1115 4
|
9月前
|
人工智能 Cloud Native 开发者
云原生架构下的思考:从五家服务商看AI种草系统的演进与部署实践
本文从云原生视角解析2025年五家AI种草服务商的架构模式,涵盖微服务、HPC、SaaS等技术路径,剖析其部署复杂度与运维责任划分,助力企业平衡控制力、成本与技术能力,实现营销系统与技术战略的协同演进。
|
Java Spring
SpringBoot: 启动Banner在线生成工具
SpringBoot: 启动Banner在线生成工具
42651 1
SpringBoot: 启动Banner在线生成工具
|
人工智能 自然语言处理 Linux
如何获取 OpenAI API 密钥
本教程详细介绍如何注册 OpenAI 账户、获取 API 密钥并部署 GPT-4 模型。内容涵盖访问官网、登录注册、创建密钥、配置 Python 环境及调用 API 的完整流程,并提供示例代码帮助开发者快速上手。
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【9月更文挑战第11天】在数字时代,数据安全至关重要。AES与RSA加密技术相结合,构成了一道坚固防线。AES以其高效性保障数据加密,而RSA则确保密钥安全传输,二者相辅相成,提供双重保护。本文通过Python代码示例展示了这一加密方案的魅力,强调了其在实际应用中的重要性和安全性。使用HTTPS等安全协议传输加密密钥和密文,确保数据在数字世界中自由流通而无忧。
710 1

热门文章

最新文章