当前位置: 首页 > news >正文

关于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)
http://www.jsqmd.com/news/487081/

相关文章:

  • SocialEcho vs Hootsuite:哪款更适合出海多账号社媒运营?
  • 【第三十六周】论文阅读02
  • 解决java客户端连接ssh失败问题
  • 腾讯对OpenClaw技能数据的抓取行为,究竟是符合开源精神的本地镜像还是侵害开发者权益的恶意抄袭?
  • 污水厂高清效果图,3D渲染后高清图 基本污水厂的工艺段该有的都有, 可以直接应用 50多套工艺...
  • LangChain/LangGraph/OpenAI核心概念+实战指南
  • JDK编译版本的错误
  • 搞微电网仿真就像搭乐高,只不过每个模块都得带脑子。今天咱们聊聊风光储氢全家桶怎么玩并离网切换和调频,直接上干货
  • 宁夏鑫玖恒钢结构丨设计、生产、销售、施工一体化综合服务商 - 宁夏壹山网络
  • 计及绿证交易与碳排放的智能楼宇微网优化调度模型-原创系列
  • 各子群独立进化
  • YOLO11 改进 - SPPF模块 _ SPPELAN 空间金字塔池化与增强局部注意力:替代SPPF增强多尺度上下文捕获,提升检测精度
  • 基于核主成分分析的回归数据降维可视化方法及Matlab实现
  • C语言基础学完后底层开发卡壳?这三个开源项目帮你破局
  • 华为OD机考双机位C卷 - 模拟消息队列 (Java Python JS GO C++ C)
  • VAE变分自编码器VAE Loss基础数学知识
  • JavaWeb SpringBoot 总结
  • YOLO26改进97:全网首发--c3k2模块添加GCConv模块:垂直多卷积与水平多路径结构进行训练
  • openclaw 运维及使用
  • 互斥信号量和二值信号量的区别
  • 维科技术2025年亏损收窄至1.02亿!钠电池爬坡期后的业绩拐点已现?
  • 2026年降AI率工具哪个好?亲测这3款真的有效
  • 原来那些 TikTok 百万播放的带货视频,是在 Clipcat 一键复刻的?10 分钟爆单
  • 毕业论文AI率超标怎么办?这几款降AI工具帮你轻松过关
  • iNaturalist开放海量自然数据与计算机视觉挑战
  • 卷积神经网络零基础-Alexnet网络
  • D3DCompiler_47.dll怎么解决?当运行某程序出现提示找不到此文件问题
  • 如何通过485通信控制汇川电机
  • 锂离子电池的充电状态和健康状态估计 石墨-磷酸铁锂电池的循环寿命模型 该项目的目标是设计一个强...
  • 光储直流微电网Simulink仿真模型——独立光伏系统能量管理及最大功率点跟踪