Lambda表达式与新的Streams API相结合

如大家所了解的,程序员常常使用Java 8来编写更简洁、更灵活的代码,例如,他们可以将 lambda表达式与新的Streams API相结合,来表达丰富的数据处理查询:

复制代码
int total = invoices.stream()
                    .filter(inv -> inv.getMonth() == Month.JULY)
                    .mapToInt(Invoice::getAmount)
                    .sum();

上面的示例演示了如何从发票集合中计算 7 月份应付的总金额。传递一个 lambda 表达式以查找月份为 7 月份的发票,并传递一个方法引用以从发票中查找金额。 您可能想知道 Java 编译器是如何在幕后实现 lambda 表达式和方法引用的,以及 Java 虚拟机 (JVM) 是如何处理它们的。

例如,lambda 表达式只是匿名内部类的语法糖吗?毕竟,上面的代码可以通过将 lambda 表达式的主体复制到匿名类的相应方法的主体中来翻译:

复制代码
int total = invoices.stream()
                    .filter(new Predicate<Invoice>() {
                        @Override
                        public boolean test(Invoice inv) {
                            return inv.getMonth() == Month.JULY;
                        }
                    })
                    .mapToInt(new ToIntFunction<Invoice>() {
                        @Override
                        public int applyAsInt(Invoice inv) {
                            return inv.getAmount();
                        }
                    })
                    .sum();
相关推荐
weixin_440784118 小时前
【HandlerThread实现原理】
android·java·开发语言
天空'之城8 小时前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
XR1234567888 小时前
工厂车间无线网络方案对比:AGV漫游哪家强?
开发语言·php
傻啦嘿哟9 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
迷迭香yy9 小时前
集合竞价数据挖掘实战:用Python构建开盘信号识别系统
人工智能·python·数据挖掘
現実君9 小时前
【硬件进阶】AD22上位替换JLEDA教程
开发语言·php
mubei-1239 小时前
SpringDAO的用法
java·开发语言·数据库
李昊哲小课11 小时前
fastapi sse websocket 奶茶店实时订单看板
人工智能·python·websocket·网络协议·fastapi·sse
格林威12 小时前
多相机微秒级对齐:硬件触发 vs PTP(IEEE 1588)方案实战对比
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉
初级代码游戏13 小时前
iOS开发 Swift 速记2:三种集合类型 Array Set Dictionary
开发语言·ios·swift