news 2026/5/23 3:45:53

java学习日志--Lambda表达式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java学习日志--Lambda表达式

前言

在上一篇关于内部类的讨论中,我们提到了一种特殊的内部类形式——匿名内部类,它允许在定义类的同时直接创建对象。而Lambda表达式实际上是一种更简洁的替代写法,当满足特定条件时,它就可以用来简化匿名内部类的使用。

一、Lambda表达式是什么

Lambda表达式是一种匿名函数,它有着自己的一套固定写法,实际上就是对原本的匿名内部类的简化,允许你在需要的地方更加简洁地定义一个函数,而无需正式声明一个函数。

Lambda表达式是一种对接口的实现,而且要求这个接口必须为函数型接口。

所谓函数型接口,就是只有一个抽象方法的接口。

二、Lambda表达式的语法

2.1 语法

Lambda表达式是Java 8引入的一种匿名函数实现方式,它提供了一种更简洁的方式来编写函数式接口的实现。

Lambda表达式的语法实现:

接口类型 引用 = (参数列表)-> { //方法实现 }

这是Lambda表达式的基本实现,是一个固定格式,但是我们可以对这个格式进行一些简化,这些我们在第三部分详细总结。

2.2 举例分析

下面我举一个例子,来帮助我们理解对它的使用:

例如,现在我给你一个“灯”的函数型接口,如下:

interface Light{ void shine(String light); }

我们可以在main方法中使用Lambda表达式来进行匿名内部类的书写,同时创建对应的对象:

Light light = new Light(String color){ //控制台输入颜色 System.out.println("请输入颜色:"); color = sc.nextLine(); //判断进行输出 if (color.equals("green")){ System.out.println("green"); }else if (color.equals("yellow")){ System.out.println("yellow"); } };

我们现在按照Lambda表达式的格式对这个匿名内部类进行书写,就可以是这样的:

Light light = (String color) -> { //控制台输入颜色 System.out.println("请输入颜色:"); color = sc.nextLine(); //判断进行输出 if (color.equals("green")){ System.out.println("green"); }else if (color.equals("yellow")){ System.out.println("yellow"); } };

这是初步的写法,但一般我们会将其简化着使用。

三、Lambda表达式的精简用法

这里给出一个接口以及对应的匿名内部类写法,下边拿这个来举例子:

//接口 interface IB{ void eat(String food); } //实现 IB ib = (String food) -> { System.out.println("吃" + food) };

3.1 方法实现的花括号

当方法实现只有一条语句时,花括号可以省略,例如:

//Lambda表达式 IB ib = (String food) -> System.out.println("吃" + food);

3.2 参数列表里的参数类型

参数类型可以省略,例如上边的例子:

//Lambda表达式 IB ib = (food) -> System.out.println("吃" + food);

3.3 参数列表外的()

当参数只有一个时,参数列表外的()可以省略,例如:

//Lambda表达式 IB ib = food -> System.out.println("吃" + food);

3.4 {}和return

当方法的实现只有一行return时,{}和return可以一起省略,例如:

//Lambda表达式 IB ib = food -> return "吃" + food; //Lambda表达式 IB ib = food -> "吃" + food;

有一种情况,当返回值只有一层判断,我们可以直接使用三目运算来达到只有一行return,从而简化,例如:

//实现 IC ic = food -> { if(food.equals("牛排")){ return "是牛排"; }else{ return "不是牛排"; } } //Lambda表达式 IC ic = food -> food.equals("牛排") ? "是牛排" : "不是牛排";

3.5 输出的高级用法

如果我们要输出的值就是我们传入的那个参数,那么我们可以像下边这样写:

//实现 IA a1 = color -> System.out.println(color); //Lambda表达式 IA a1 = Systrm.out::println;

总结

所以我们第二部分中的那个Lambda表达式可以简化为下边这种写法:

//控制台输入颜色 System.out.println("请输入颜色:"); color = sc.nextLine(); Light light = color -> color.equals("green")?"green":"yellow"; System.out.println(light);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 19:36:12

Langchain4j-文档处理和 RAG 流程分析

文档处理和 RAG 流程分析 请关注公众号【碳硅化合物AI】 目录 概述文档加载流程文档解析和分割嵌入生成和存储RAG 检索增强流程关键类关系实现关键点说明总结 概述 RAG(Retrieval-Augmented Generation)是 LangChain4j 的核心功能。基本思路&#x…

作者头像 李华
网站建设 2026/5/22 2:37:02

x64dbg脚本自动化入门教程:简化重复任务流程

从手动到自动:用 x64dbg 脚本重塑你的逆向工程效率你有没有过这样的经历?连续三天分析同一个加壳样本,每次都要重复同样的操作:加载程序、下断点、单步跟进、识别 OEP、转储内存……手指都快按麻了,稍一走神还可能漏掉…

作者头像 李华
网站建设 2026/5/22 22:05:14

音频质量影响识别结果:信噪比越高准确率越好

音频质量影响识别结果:信噪比越高准确率越好 在智能语音系统日益普及的今天,我们早已习惯对手机说“嘿 Siri”,或是在会议中自动生成字幕。然而,当系统把“打开空调”听成“打开厕所”,把财务汇报中的“一百万”误识为…

作者头像 李华
网站建设 2026/5/20 9:10:58

为什么说Fun-ASR是中小企业语音识别最优选?

为什么说Fun-ASR是中小企业语音识别最优选? 在远程办公常态化、会议录音爆炸式增长的今天,越来越多中小企业开始面临一个共性问题:如何高效、安全地将大量语音内容转化为可编辑、可分析的文字?传统做法是依赖人工听写,…

作者头像 李华
网站建设 2026/5/23 1:31:07

牛津大学:给AI装上“可信度雷达“,像人类一样学会说“我不确定“

这项由英国牛津大学工程科学系的Jeremias Sulam、Itai Gat和Aviv Navon,与康奈尔大学、麻省理工学院、哈佛大学等机构的研究者共同完成的研究,发表于2025年1月的arXiv预印本平台,论文编号为arXiv:2501.09588v1。对这项研究感兴趣的读者可以通…

作者头像 李华
网站建设 2026/5/21 10:20:45

热词列表格式详解:每行一个词汇提升识别命中率

热词列表格式详解:每行一个词汇提升识别命中率 在智能客服的录音转写中,一句“请问怎么申请退款流程?”被识别成“请问怎么申请回款流程?”,看似一字之差,却可能导致客户诉求被错误归类。类似问题在医疗、金…

作者头像 李华