Lambda 表达式使用详解,一篇文章手把手教会你

news2024/9/24 3:26:18

目录

1. Lambda 表达式有什么用?

2. 匿名内部类举例

3. Lambda 表达式的标准格式与使用

4. Lambda 表达式使用注意点

5. 什么是函数式接口?

6. Lambda 表达式的省略写法

7. Lambda 表达式省略写法简单展示


1. Lambda 表达式有什么用?

Lambda 表达式在实际开发中主要目的往往是用来简化匿名内部类的书写。我们知道,有些方法中的参数需要传递接口的实现类对象,假如说我们为了传递类对象而单独去创建一个类,会显得代码有些冗余,所以这个时候我们往往会采用匿名内部类的形式去创建接口的实现类对象。

那么此时,我们将一段逻辑代码作为参数放到方法的参数列表中,会显得不那么好看,所以为了简化代码量,让参数列表更简洁好看,我们就可以采用 Lambda 表达式的方式来书写匿名内部类。

2. 匿名内部类举例

我先来展示一段匿名内部类的代码逻辑,如下

我随便定义了一个数组,添加几个乱序的数,现要对它们进行排序,我可以调用 Arrays 中的 sort 方法排序,该方法传递两个参数,第一个参数传递要排序的数组,第二个参数传递一个比较器对象。

public class LambdaTest {
    public static void main(String[] args) {
        // 定义一个数组
        Integer[] arr = {1,4,8,0,9,6,7};
        // 调用 Array 中的 sort 方法对数组中的数据排序,
        Arrays.sort(arr, new Comparator<Integer>() {
            // 重写方法逻辑
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });
        System.out.println(Arrays.toString(arr));
    }
}

那么问题来了,比较器接口 Java 已经提供了,但它没有提供实现类,怎么办呢?我们能在 Java 源码中实现 Comparator 接口吗?这种做法显然是不可行的,所以这个时候我们就可以采用匿名内部类的形式,创建一个 Comparator 接口的实现类对象,并做相应的逻辑处理。

运行上述代码,我们就可以在控制台得到如下结果,可以发现数组已经排好序了。

3. Lambda 表达式的标准格式与使用

Lambda 表达式的格式非常简单,我们只需要将原本匿名内部类方法中的参数写入到 "()" 中,将方法的执行逻辑写入 "{}" 即可,中间使用固定格式 "->" 连接即可。

使用 Lambda 表达式将上面匿名内部类的代码简化之后,就变成了下面这个样子。

可以看到,在使用了 Lambda 表达式之后,代码变得极为简介,删掉了方法名,@Override注解,还删掉了一对大括号,只留下方法的参数和方法的执行逻辑。

我们再次运行此方法,仍然可以在控制台得到正确的结果,这就是 Lambda 表达式的简单使用。

4. Lambda 表达式使用注意点

在使用 Lambda 表达式简化匿名内部类的书写时,需要注意两个点。

(1)Lambda 表达式主要用于简化匿名内部类的书写,一般不应用于其他地方;

(2)并不是所有的匿名内部类都可以使用 Lambda 表达式来简化书写,它只能简化函数式接口的匿名内部类的书写方式。

5. 什么是函数式接口?

记住一句话就可以了,"有且仅有一个抽象方法的接口叫函数式接口,接口上可以添加@FunctionalInterface注解"。

例如我们刚才使用的 Compartor 接口,它就是一个函数式接口,我们看一下它的源码就可以知道,如下图所示,接口上就标注有 @FunctionalInterface 注解。

6. Lambda 表达式的省略写法

通过上面的学习,我们已经简单的了解明白了如何使用 Lambda 表达式简化函数式接口的匿名内部类写法。

但我现在告诉你,尽管 Lambda 表达式已经上面已经非常简化了,其实在一些情况下,Lambda 表达式本身的写法还可以继续省略,但在省略时需要满足以下几点规则。

(1)参数类型可以省略不写;

(2)如果只有一个参数,参数类型省略不写,同时 "()" 也可以省略;

(3)如果 Lambda 表达式的方法体只有一行,大括号,分号,returen 同时省略不写,注意是三个同时省略不写。

7. Lambda 表达式省略写法简单展示

基于上面的省略要求,我们还可以对上面排序的代码继续简化,我们先把原本的 Lambda 代码拿过来,如下图

第一步:

先看第一点,参数类型省略不写,省略之后如下所示

第二点:

上述方法中两个参数,所以 "()" 不能省略,不做变化

第三点:

方法体只有一行,"return","{}",";" 同时省略不写,就会变成下面这个样子

此时我们在运行此方法,仍然可以在控制台得到正确的运行结果,如下图

有些同学可能会觉得这样写可读性太差了,也很正常,等我们运用熟练了就习惯了。

这里我还是要补充一句,Lambda 表达式的使用在开发中还是较为常见的,所以同学们还是要重视起来,在以后的一些项目中,你还是有可能经常会见到 Stream 流搭配 Lambda 表达式结合使用简化代码的,所以在我们遇到的时候要能看得懂。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode【394】字符串解码

题目&#xff1a; 思路&#xff1a; 参考&#xff1a;https://blog.csdn.net/xushiyu1996818/article/details/107973300 代码&#xff1a; public String decodeString(String s){Deque<Character> stack new ArrayDeque<>();for(char c :s.toCharArray()){if…

第一章:Android开发技能入门指南

Android 从入门到出门第一章&#xff1a;Android开发技能入门指南第二章&#xff1a;使用声明式UI创建屏幕并探索组合原则第三章&#xff1a;使用Hilt处理Jetpack Compose UI状态第四章&#xff1a;现代Android开发中的导航第五章&#xff1a;使用DataStore存储数据和测试第六章…

软考之系统架构师-01什么是系统架构师?什么是系统架构?

第一章 绪论 1. 什么是系统架构师&#xff1f; 系统架构设计师(System Architecture Designer&#xff09;是项目开发活动中的关键角色之一。系统架构是系统的一种整体的高层次的结构表示&#xff0c;是系统的骨架和根基&#xff0c;其决定了系统的健壮性和生命周期的长短。 …

系统架构师--面向对象选择题

系统架构师--面向对象选择题 面向对象考题&#xff08;将设计模式删减了&#xff0c;主要考察uml&#xff09;

IDEA使用模板创建webapp时,web.xml文件版本过低的一种解决方法

创建完成后的web.xml 文件&#xff0c;版本太低 <!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Appl…

关于优先队列的一点细节

在使用优先队列PriorityQueue时&#xff0c;默认的是升序排列&#xff0c;自己可以指定比较器改为降序排列&#xff0c;例如Collections.reverseOrder()等。 但是在我做力扣的过程中&#xff0c;简单的用一个list的addAll方法添加了优先队列里边所有元素&#xff0c;结果发现添…

浅谈智能照明控制系统在地铁照明中的应用

摘要&#xff1a;随着我国经济建设的加速发展&#xff0c;城市轨道交通越来越获得社会的青睐。车站照明关系到轨道交通的服务质量、运营成本、运营成本等多个方面&#xff0c;在既要保证运营成本又要满足国家“节能”要求的背景下&#xff0c;智能照明控制系统应运而生。 轨道…

uniapp:幸运大转盘demo

<template><view class"index"><image src"../../static/img/158.png" mode"" class"banner"></image><view class"title">绿色积分加倍卡拿到手软</view><almost-lottery :lottery…

Element组件案例 Vue路由 前端打包部署步骤

目录 Element组件案例案例需求与分析环境搭建整体布局顶部标题左侧导航栏核心-右侧导航栏表格编写表单编写分页工具栏编写 异步数据加载异步加载数据性别展示修复图片展示修复 Vue路由Vue路由简介Vue路由入门 打包部署前端工程打包部署前端工程nginx介绍部署 Element组件案例 …

【TES720D】基于复旦微的FMQL20S400全国产化ARM核心模块

TES720D是一款基于上海复旦微电子FMQL20S400的全国产化核心模块。该核心模块将复旦微的FMQL20S400&#xff08;兼容FMQL10S400&#xff09;的最小系统集成在了一个60*70mm的核心板上&#xff0c;可以作为一个核心模块&#xff0c;进行功能性扩展&#xff0c;特别是用在控制领域…

DC-DC模块升压电源直流隔离低压升高压正负输出变换器

特点 效率高达 80%以上1*1英寸标准封装电源正负双输出稳压输出工作温度: -40℃~85℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好可直接焊在PCB 上 应用 HRA 0.2~8W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#xff1a;4.5~9V、9~18V、及18~36V、36…

华测监测预警系统 2.2 任意文件读取漏洞复现 [附POC]

文章目录 华测监测预警系统 2.2 任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 华测监测预警系统 2.2 任意文件读取漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章…

macOS Sonoma 14.1beta3(23B5067a)发布

黑果魏叔10 月 11 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.1 开发者预览版 Beta 3 更新&#xff08;内部版本号&#xff1a;23B5067a&#xff09;&#xff0c;本次更新距离上次发布隔了 7 天。 根据官方发布的macOS Sonoma 14.1beta3更新日志&#xff0c;此…

如何按照洁净区不同等级选择不同流量的粒子计数器设备?

如今&#xff0c;尘埃粒子计数器已经广泛应用于生物制药、电子产业、医疗手术室、食品加工、洁净工作台、科学实验、航空航天、精密加工及新能源等领域&#xff0c;用于洁净室洁净度等级的测试及判定。今天小编就和大家来浅说说如何按需选择不同流量的尘埃粒子计数器。 01 每个…

vue2安装cesium并使用

一、安装 1.安装cesium npm install cesium1.95.0 -S 2.安装所需 npm install copy-webpack-plugin10.2.4 -D 二、配置 1.配置vue.config.js vue 中引入cesium 需要用copy-webpack-plugin 把一些文件拷贝到打包目录 // vue.config.js const CopyWebpackPlugin require…

中国象棋(人机)

欢迎来到程序小院 中国象棋 玩法&#xff1a; 鼠标左键点击选中棋子&#xff0c;再点击位置进行下棋&#xff0c;可以进行悔棋&#xff0c;重新开始操作&#xff0c;棋盘右侧有AI分析&#xff0c;帮助你进一步提升棋艺&#xff0c;快去下棋吧^^。开始游戏https://www.ormcc.co…

服务器数据恢复-DS5300存储raid5硬盘出现坏道离线的数据恢复案例

服务器数据恢复环境&#xff1a; 某单位一台DS5300存储&#xff0c;1个主机4个扩展柜&#xff0c;组建了2组RAID5&#xff08;一组27块硬盘&#xff0c;一组23块盘&#xff09;。27块盘的那组RAID5阵列存放Oracle数据库文件&#xff0c;存储系统一共分了11个卷。 服务器故障&a…

Linux命令及详细解释、用法

关机/重启/注销 命令 说明 shutdown -h now 即刻关机 shutdown -h 10 10分钟后关机 shutdown -h 11:00 11&#xff1a;00关机 shutdown -h 10 预定时间关机&#xff08;10分钟后&#xff09; shutdown -c 取消指定时间关机 shutdown -r now 重启 shutdown -r 10 10分钟之…

分享一些走心的句子英文表达

曾经有人问更新社媒&#xff0c;除了发生活照&#xff0c;产品照&#xff0c;与客户的聊天截图和一些产品视频&#xff0c;发货视频之外&#xff0c;还能发什么&#xff1f;其实像一些你平时发在朋友圈的走心的话&#xff0c;或者是一些正能量也是可以的&#xff0c;从你的文字…

【内网穿透】Docker部署Drupal并实现公网访问

目录 前言 1. Docker安装Drupal 2. 本地局域网访问 3 . Linux 安装cpolar 4. 配置Drupal公网访问地址 5. 公网远程访问Drupal 6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。…