【Java基础之lambda表达式的使用】

lambda表达式

  • 什么是lambda表达式
  • lambda表达式的格式
  • 使用场景
  • 使用前提
  • 省略规则

什么是lambda表达式

函数式编程思想(面向过程)
在数学中,函数就是有输入量和输出量的一套计算方法,就是拿“数据做操作”;
在面向对象的编程中,强调必须通过对象的形式来做事情,函数式编程思想则尽量的忽略对象的复杂语法,强调做什么,而不是以什么形式去做。lambda表达式就是函数式编程思想的具体体现。

lambda表达式的格式

(参数列表) -> {代码块}

如果有多个参数,参数之间用逗号隔开;如果只有一个参数,小括号可以省略;如果没有参数,小括号不能省略。

使用场景

  • 简写匿名内部类

例如在创建线程时,我们使用匿名内部类的写法可以是这样的:

Thread t = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("匿名内部类线程启动了");}
});
t.start();

如果我们使用lambda表达式的方式去写这个方法应该是这样的

Thread t = new Thread(() -> {System.out.println("匿名内部类线程启动了");
});
t.start();

由于Runnable接口的方法没有参数,所以这里lambda的参数列表中是空的(空的也要写括号!)。
是不是这种方式写起来要简单不少呢?这正符合函数式编程思想的理念,即尽量简化面向对象编程中一些复杂的关键字、方法名、返回类型。
通过这个例子相信大家都知道lambda表达式怎么写了,对于lambda表达式简单理解其实是拿()中的参数去 -> 做什么{代码块};这是类似数学中的函数一样,只有数值和操作符就可以计算出结果,所以称为函数式编程思想。

我们在多规则排序的时候也可以使用这种方式简化代码,如:

Integer[] numbers = {5, 2, 9, 1, 5, 6};// 使用匿名内部类方式进行升序排序
Arrays.sort(numbers, new Comparator<Integer>() {@Overridepublic int compare(Integer a, Integer b) {return a - b;}
});

对应的lambda写法

Integer[] numbers = {5, 2, 9, 1, 5, 6};// 使用Lambda表达式进行升序排序
Arrays.sort(numbers, (a, b) -> a - b);

是不是简单了很多,不需要记那些难记的方法名实在是太舒服了。

使用前提

那么既然lambda表达式这么简单,我们能不能使用lambda表达式代替所有的匿名内部类呢?答案是否定的,因为lambda表达式有它自己的使用条件,这个条件非常简单,如下:

  • 要实现一个接口,且接口中有且仅有一个抽象方法。

省略规则

有的同学可能会问了,既然lambda表达式是简化代码的,那么它自己还能更简化吗(你是懂贪心的)。其实对于lambda表达式还有一些特定情况下的简化(狂喜~):

  • 1、参数类型可以省略
  • 2、方法体只有一句时大括号中的return和唯一一句的代码后的分号可以省略
  • 3、只有一个参数时小括号可以省略

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

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

相关文章

Transformer在时间序列预测上的应用1

Transformer在时间序列预测上的应用 摘要 Transformer最初是为了处理自然语言处理(NLP)任务而设计的,但由于其独特的架构和能力,它也被用于时间序列分析。Transformer应用于时间序列分析中的基本思想在于其自注意力机制,这使其能够有效捕捉时间序列数据中的长期依赖关系…

最新篇 接口测试工具Postman 企业常规面试题出炉~(附答案)

面试题目录 说下你对Postman的了解&#xff1f; Postman你在工作中使用流程是什么样的&#xff1f; Postman 你使用了哪些功能&#xff1f; Postman 里面如何管理测试环境&#xff1f; Postman如何设置关联&#xff1f; postman参数化有哪几种方式&#xff1f; 在postman中&…

Android平台RTSP|RTMP直播播放器技术接入说明

技术背景 大牛直播SDK自2015年发布RTSP、RTMP直播播放模块&#xff0c;迭代从未停止&#xff0c;SmartPlayer功能强大、性能强劲、高稳定、超低延迟、超低资源占用。无需赘述&#xff0c;全自研内核&#xff0c;行业内一致认可的跨平台RTSP、RTMP直播播放器。本文以Android平台…

浏览器【WebKit内核】渲染原理【QUESTION-1】

浏览器【WebKit内核】渲染原理【QUESTION】 1.浏览器输入一个网址&#xff08;域名之后&#xff09;,浏览器会呈现一个新的页面&#xff0c;中间的过程是怎么实现的&#xff1f; 输入一个网址之后&#xff0c;首先DNS服务器会解析这个域名&#xff0c;将这个域名解析成IP地址&…

.NET 相关概念

.NET 和 .NET SDK .NET 介绍 .NET 是一个由 Microsoft 开发和维护的广泛用于构建各种类型应用程序的开发框架。它是一个跨平台、跨语言的开发平台&#xff0c;提供了丰富的类库、API和开发工具&#xff0c;支持开发者使用多种编程语言&#xff08;如C#、VB.NET、F#等&#xf…

09 算术运算符

① 运算符除了用于算数加法以外&#xff0c;还可以用于列表、元组、字符串的连接&#xff0c;但不支持不同类型的对象之间的相加或连接。 print([1, 2, 3] [4, 5, 6]) # 连接两个列表 print((1, 2, 3) (4,)) # 连接两个元组 print(hello 123) # 连接字符串 print(Fa…

开发桌面程序-Electron入门

Electron是什么 来自官网的介绍 Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 总…

与Bug较量:Codigger之软件项目体检Software Project HealthCheck来帮忙

在软件工程师的世界里&#xff0c;与 Java 小程序中的 Bug 作战是一场永不停歇的战役。每一个隐藏在代码深处的 Bug 都像是一个狡猾的敌人&#xff0c;时刻准备着给我们的项目带来麻烦。 最近&#xff0c;我就陷入了这样一场与 Java 小程序 Bug 的激烈较量中。这个小程序原本应…

wget下载github文件得到html文件

从github/gitee下载源文件&#xff0c;本来是22M下载下来只有11k 原因&#xff1a; Github会提供html页面&#xff0c;包括指定的文件、上下文与相关操作。通过wget或者curl下载时&#xff0c;会下载该页面 解决方式&#xff1a; github点击Code一栏的raw按钮&#xff0c;获得源…

【论文复现】Vision Transformer(ViT)

1. Transformer结构 1.1 编码器和解码器 翻译这个过程需要中间体。也就是说&#xff0c;编码&#xff0c;解码之间需要一个中介&#xff0c;英文先编码成一个意思&#xff0c;再解码成中文。 那么查字典这个过程就是编码和解码的体现。首先我们的大脑会把它编码&#xff0c;编…

遍历dom元素下面的子元素的方法,vue中原始标签的ref得到是该元素的dom及下面包含的子dom,与组件ref是引用不同

研究到这个的目的来源是 想用div 遍历方式 替代之前的table tr td 那种框选功能&#xff0c;觉得div灵活&#xff0c;可以随便在外面套层&#xff0c;td与tr之间就不能加div加了布局就乱&#xff0c;然后使用之前的原理&#xff08; const cellList tableIdR.value.querySelec…

【反转链表 II】python刷题记录

印象中&#xff0c;这是遍历r2了&#xff0c;还好没放弃。 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def reverseBetween(self, head: Optional…

C# struct里面的class是值类型还是引用类型

最近在接连的面试一些候选者&#xff0c;我发现很多候选者对于基础还是一知半解 很多人知道struct是值类型&#xff0c;class是引用类型 但是我补一句&#xff0c;如果一个struct里面有个class是值类型还是引用类型 很多面试者就答不出来了&#xff0c;其实这是个很简单的问题…

了解Selenium中的WebElement

Selenium中到处都使用WebElement来执行各种操作。什么是WebElement&#xff1f;这篇文章将详细讨论WebElement。 Selenium中的WebElement是一个表示网站HTML元素的Java接口。HTML元素包含一个开始标记和一个结束标记&#xff0c;内容位于这两个标记之间。 HTML元素的重命名 …

Spring Boot与微服务架构:快速开发指南

引言 随着微服务架构的兴起,越来越多的企业选择将应用拆分成一系列小型、独立且松耦合的服务。Spring Boot作为Spring Framework的扩展,提供了快速开发微服务的能力。本文将深入探讨如何使用Spring Boot快速开发微服务,包括服务发现、配置管理等关键技术。 微服务架构概述…

SCADA系统易用性的重要性

对于中小企业而言&#xff0c;SCADA系统的易用性至关重要&#xff0c;因为它直接影响到系统的实施效率、员工的接受程度和培训成本。一个易用的SCADA系统可以减少员工对新技术的学习曲线&#xff0c;加快系统的部署速度&#xff0c;并降低长期的维护成本。此外&#xff0c;易用…

音视频入门基础:H.264专题(15)——FFmpeg源码中通过SPS属性获取视频帧率的实现

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

Parameter index out of range (2 > number of parameters, which is 1【已解决】

文章目录 1、SysLogMapper.xml添加注释导致的2、解决方法3、总结 1、SysLogMapper.xml添加注释导致的 <!--定义一个查询方法&#xff0c;用于获取日志列表--><!--方法ID为getLogList&#xff0c;返回类型com.main.server.api.model.SysLogModel,参数类型为com.main.se…

Unity UGUI 之 坐标转换

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 前置知识&#xff1a;…

大模型-鲁棒性总结-2024-7-21

大语言模型-鲁棒性总结 文章目录 大语言模型-鲁棒性总结1.大语言模型的鲁棒性概述2.自然噪声的鲁棒性2.1.真实标签任务的性能2.2.开放式任务的表现 3.评估分布外&#xff08;OOD&#xff09;任务的弹性3.1.OOD检测3.2.OOD泛化 1.大语言模型的鲁棒性概述 大语言模型&#xff08…