news 2026/8/13 4:54:24

关于Lambda表达式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于Lambda表达式

Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));为例子
Arrays.sort方法要求第二个参数是Comparator<int[]>,编译器通过(a, b)得知参数类型Comparator<int[]>,会去找这个接口,然后下面只有一个抽象方法compare,然后就重写这个方法,重写的内容就是Integer.compare(a[0], b[0])

1.Lambda 表达式的本质

(a,b)->Integer.compare(a[0],b[0])

这行代码的本质是:一个匿名函数的简写形式

2.一步步还原 Lambda

原始需求

Arrays.sort()需要第二个参数是Comparator<int[]>类型的对象:

publicstatic<T>voidsort(T[]a,Comparator<?superT>c)

演化过程

第1层:最原始的方式 - 创建实现类

classMyComparatorimplementsComparator<int[]>{@Overridepublicintcompare(int[]a,int[]b){returnInteger.compare(a[0],b[0]);}}Arrays.sort(intervals,newMyComparator());

第2层:匿名内部类

Arrays.sort(intervals,newComparator<int[]>(){@Overridepublicintcompare(int[]a,int[]b){returnInteger.compare(a[0],b[0]);}});

第3层:Lambda 表达式

Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));

3.Lambda 的编译原理

当你写 Lambda 时,编译器会:

  1. 推导类型:知道abint[]类型(因为intervalsint[][]
  2. 生成方法:创建一个与Comparator<int[]>.compare()签名匹配的方法
  3. 创建实例:在运行时创建该接口的实例

反编译后近似于:

// 编译器生成的近似代码privatestaticintlambda$main$0(int[]a,int[]b){returnInteger.compare(a[0],b[0]);}// 然后创建 Comparator 实例Arrays.sort(intervals,newComparator<int[]>(){@Overridepublicintcompare(int[]a,int[]b){returnlambda$main$0(a,b);}});

4.Lambda 的语法解析

(参数列表)->{方法体}(a,b)->Integer.compare(a[0],b[0])
  • (a, b):参数列表,类型自动推断
  • ->:Lambda 运算符
  • Integer.compare(a[0], b[0]):方法体(单行时可省略 {} 和 return)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/13 4:53:26

动态规划的入门解析

动态规划 把大问题拆成小问题 记住小问题的答案 避免重复计算最简单的题目示例——斐波那契数列class Solution:def fib(self, n: int) -> int:# 排除 Corner Caseif n 0:return 0# 创建 dp table dp [0] * (n 1) ​# 初始化 dp 数组dp[0] 0dp[1] 1 ​# 遍历顺序: 由…

作者头像 李华
网站建设 2026/7/14 15:48:01

文档检索软件self searcher绿色版下载

兼具本地文件名查找和文件内容查找&#xff0c;相当于everythinganytxt searcher: 通过百度网盘分享的文件&#xff1a;Self-Sea… 链接:https://pan.baidu.com/s/159OrBfTmGO5xO59Fia6Xlg?pwd6sx3 复制这段内容打开「百度网盘APP 即可获取」

作者头像 李华
网站建设 2026/7/14 15:48:00

JavaScript同时触发多个函数的5种高效方法

在JavaScript/HTML中通过onclick触发多个函数 在Web开发中&#xff0c;onclick事件常用于响应用户的点击操作。实际场景中可能需要同时触发多个函数&#xff0c;例如表单提交时验证数据、记录日志、发送请求等。以下是几种实现方式及代码示例。方法一&#xff1a;在HTML中直接调…

作者头像 李华
网站建设 2026/7/14 15:48:02

初识神经网络代码

神经网络项目一般分为以下3个模块&#xff0c;数据处理&#xff0c;模型搭建&#xff0c;参数设置数据处理部分class CovidDataset(Dataset):def __init__(self, file_path, mode):# 打开指定路径的文件&#xff0c;以只读模式读取with open(file_path, "r") as f:# …

作者头像 李华
网站建设 2026/7/14 15:48:15

算法设计与分析里面的渐进符号难以理解

算法设计中的渐进符号&#xff08;Asymptotic Notation&#xff09;之所以让人觉得抽象&#xff0c;是因为它跳出了具体代码的细节&#xff0c;转而去研究“当数据量变得无穷大时&#xff0c;算法耗时的增长趋势”。为了让你彻底理解这个概念&#xff0c;我们可以把它想象成一套…

作者头像 李华