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

【 java 8】Lambda 表达式

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜
  • 📝 个人主页:馆主阿牛🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:java 小白到高手的蜕变🍁
  • 💬格言:要成为光,因为有怕黑的人!🔥
    请添加图片描述

目录

    • 📋 个人简介
  • 前言
    • 为什么使用 Lambda 表达式
    • Lambda 表达式举例
    • Lambda 表达式语法的使用
      • 语法格式一:无参,无返回值
      • 语法格式二:有一个参数,无返回值
      • 语法格式三:数据类型可以省略(类型推断)
      • 语法格式四:Lambda若只有一个参数,参数的小括号可以省略
      • 语法格式五:Lambda需要两个或者两个以上的参数,多条执行语句,并且可以有返回值
      • 语法格式六:当Lambda体只有一条语句时,return与大括号若有,都可以省略
    • Lambda 表达式的本质
  • 结语

前言

行文至此,java基础系列的文章更新的已经差不多了,现在开始会总结一些java8的新特性,然后向java web和框架方向靠近,并不断完善基础知识!

为什么使用 Lambda 表达式

Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使 Java 的语言表达能力得到了提升。

Lambda 表达式举例

public class Demo {public static void main(String[] args) {// 定制排序Comparator<Integer> integerComparator = new Comparator<Integer>(){@Overridepublic int compare(Integer o1, Integer o2) {return Integer.compare(o1,o2);}};int compare1 = integerComparator.compare(12,21);System.out.println(compare1);// 定制排序的Lambda表达式写法Comparator<Integer> com = (o1,o2) -> Integer.compare(o1,o2);int compare2 = com.compare(12,21);System.out.println(compare2);}
}

可以看到,定制排序转换为Lambda表达式后写法非常简单,只需一行代码,那么接下来我们就来学习一下Lambda的语法规则,即怎么样写Lambda表达式!

Lambda 表达式语法的使用

(o1,o2) -> Integer.compare(o1,o2);

-> :Lambda操作符或者箭头操作符
-> 左边:Lambda形参列表(其实就是接口中抽象方法的形参列表)
-> 右边:Lambda体:(其实就是重写的抽象方法的方法体)

语法格式一:无参,无返回值

// 语法格式一:无参,无返回值// 正常写法Runnable r1 = new Runnable(){@Overridepublic void run() {System.out.println("我是阿牛!");}};r1.run();// Lambda表达式写法Runnable r2 = () -> System.out.println("我是阿牛!");r2.run();

在这里插入图片描述

语法格式二:有一个参数,无返回值

// 语法格式二:有一个参数,无返回值// 正常写法Consumer<String> con = new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}};con.accept("你好!");// Lambda表达式写法Consumer<String> con1 = (String s) ->{ System.out.println(s); };con1.accept("你好呀!");

语法格式三:数据类型可以省略(类型推断)

在上面语法格式二的基础上

// 语法格式三:数据类型可以省略(类型推断)// 正常写法Consumer<String> con2 = new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}};con2.accept("你好!");// Lambda表达式写法   -   数据类型可以省略(类型推断)Consumer<String> con3 = (s) ->{ System.out.println(s); };con3.accept("你好呀!");

语法格式四:Lambda若只有一个参数,参数的小括号可以省略

在上面语法格式三的基础上

// 语法格式四:Lambda若只有一个参数,参数的小括号可以省略// 正常写法Consumer<String> con4 = new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}};con4.accept("你好!");// Lambda表达式写法   -   Lambda若只有个参数,参数的小括号可以省略Consumer<String> con5 = s ->{ System.out.println(s); };con5.accept("你好呀!");

语法格式五:Lambda需要两个或者两个以上的参数,多条执行语句,并且可以有返回值

// 语法格式五:Lambda需要两个或者两个以上的参数,多条执行语句,并且可以有返回值// 正常写法Comparator<Integer> com1 = new Comparator<Integer>(){@Overridepublic int compare(Integer o1, Integer o2) {System.out.println(o1);System.out.println(o2);return Integer.compare(o1,o2);}};int compare1 = com1.compare(12,21);System.out.println(compare1);// Lambda表达式写法Comparator<Integer> com2 = (o1,o2) -> {System.out.println(o1);System.out.println(o2);return Integer.compare(o1,o2);};int compare2 = com2.compare(12,21);System.out.println(compare2);

语法格式六:当Lambda体只有一条语句时,return与大括号若有,都可以省略

// 语法格式六:当Lambda体只有一条语句时,return 与大括号若有,都可以省略// 正常写法Comparator<Integer> com1 = new Comparator<Integer>(){@Overridepublic int compare(Integer o1, Integer o2) {return Integer.compare(o1,o2);}};int compare1 = com1.compare(12,21);System.out.println(compare1);// Lambda表达式写法  -  当Lambda体只有一条语句时,return 与大括号若有,都可以省略Comparator<Integer> com2 = (o1,o2) ->  Integer.compare(o1,o2);int compare2 = com2.compare(12,21);System.out.println(compare2);

Lambda 表达式的本质

Lambda表达式在java中与其它语言是不同的,Lambda在其它语言中是个函数,匿名函数,而在java中则作为接口的实例!

结语

如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。

🏰系列专栏
👉软磨 css
👉硬泡 javascript
👉flask框架快速入门

相关文章:

【 java 8】Lambda 表达式

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…...

改进YOLO系列 | 谷歌团队 | CondConv:用于高效推理的条件参数化卷积

CondConv:用于高效推理的条件参数化卷积 论文地址:https://arxiv.org/pdf/1904.04971.pdf 代码地址:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/condconv 卷积层是现代深度神经网络的基本构建模块之一。其中一个基本假设是,卷积核应该对数…...

SQL高级 --优化

一、SQL查询的解析 关联查询过多索引失效&#xff08;单值、符合&#xff09; 二、mysql explain使用简介 1、关于id的说明&#xff1a; 2 、select_type 常见和常用的值有如下几种&#xff1a; 分别用来表示查询的类型&#xff0c;主要是用于区别普通查询、联合查询、子…...

【C++】空间配置器

空间配置器&#xff0c;听起来高大上&#xff0c;那它到底是什么东西呢&#xff1f; 1.什么是空间配置器&#xff1f; 空间配置器是STL源码中实现的一个小灶&#xff0c;用来应对STL容器频繁申请小块内存空间的问题。他算是一个小型的内存池&#xff0c;以提升STL容器在空间申…...

nginx的介绍及源码安装

文章目录前言一、nginx介绍二、nginx应用场合三、nginx的源码安装过程1.下载源码包2.安装依赖性-安装nginx-创建软连接-启动服务-关闭服务3.创建nginx服务启动脚本4.本实验---纯代码过程前言 高可用&#xff1a;高可用(High availability,缩写为 HA),是指系统无中断地执行其功…...

通过openssl生成pfx证书

通过centos7上自带的openssl工具来生成。首先创建一个pfxcert目录。然后进入此目录。 1.生成.key文件&#xff08;内含被加密后的私钥&#xff09;&#xff0c;要求输入一个自定义的密码 [rootlocalhost cert]# openssl genrsa -des3 -out server.key 2048 Generating RSA priv…...

华为OD机试真题Python实现【敏感字段加密】真题+解题思路+代码(20222023)

敏感字段加密 题目 给定一个由多个命令字组成的命令字符串; 字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号命令字之间以一个或多个下划线_进行分割可以通过两个双引号""来标识包含下划线_的命令字或空命令字(仅包含两个双引号的命令字…...

我的 System Verilog 学习记录(1)

引言 技多不压身&#xff0c;准备开始学一些 System Verilog 的东西&#xff0c;充实一下自己&#xff0c;这个专栏的博客就记录学习、找资源的一个过程&#xff0c;希望可以给后来者一些借鉴吧&#xff0c;IC找工作的都加把油&#xff01; 本文是准备先简单介绍一下环境搭建…...

金三银四,我不允许你们不知道这些软件测试面试题

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答&#xff1a;有黑盒和白盒两种测试种类&#xff0c;黑盒有等价类划分法&#xff0c;边界分析法&#xff0c;因果图法和错误猜测法。白盒有逻辑覆盖法&…...

【UnityEditor】Unity将Multiple Sprite分割成多张png小图

如题&#xff0c;代码如下 using UnityEngine; using UnityEditor; using System.IO;public class SplitTexture {[MenuItem("ExtraTools/SplitTexture")]static void DoSplitTexture(){// 获取所选图片Texture2D selectedImg Selection.activeObject as Texture2D…...

独立搭建 handle server

本节主要介绍,如何搭建一个与 GHR隔离的 handle sever,不与外界有任何连通。 下载文件 访问地址下载最新版:http://www.handle.net/download_hnr.html 这里以 9.3.0 版本作为讲解 解压服务端,解压客户端 # 解压 tar -xzvf handle-9.3.0-distribution.tar.gz# 到目录下 …...

记一次KindEditor表格修改无效问题

项目说明 项目是由UmiJS创建的(ReactAnt Design4.2)&#xff0c;项目需求是富文本编辑器录入多样内容&#xff0c;可供查看。 通过各方探索以及客户的沟通&#xff0c;选定了KindEditor编辑器&#xff0c;通过iframe嵌入。但仍有很多不符合要求的地方&#xff0c;所以要进行很…...

一种图片展示的完美方案,图片展示,object-fill

通常一般的处理 <style>.img-container {width: 300px;height: 200px;background: #f60;}img {width: 100%;height: 100%;}</style> </head> <body><div class"img-container"><img src"./行道树.png" alt""&g…...

社科院杜兰金融管理硕士——考研初试成绩已出,关于分数“6线”你有了解吗

多地公布了2023考研初试成绩查询时间&#xff0c;部分省份今日就能查询到考研初试成绩&#xff0c;考研学子们此刻的心情应该是很忐忑吧&#xff0c;关于分数的“6线”你都知道有哪些吗&#xff1f;我们跟随社科院杜兰金融管理硕士项目一起去了解一下。1.国家线教育部依据硕士生…...

Talk | 清华大学交叉信息研究院助理教授杜韬:利用计算方法探究流固耦合

本期为TechBeat人工智能社区第474期线上Talk&#xff01; 北京时间2月15日(周三)20:00&#xff0c;清华大学交叉信息研究院助理教授——杜韬的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “利用计算方法探究流固耦合”&#xff0c;届时将介绍流固…...

2023年,智能家居实体门店如何选品?

作者 | 启明 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn2023年&#xff0c;是智能家居实体门店的机会与破局之年&#xff0c;作为智能家居实体门店老板&#xff0c;我们应该具备什么样的增长思维呢&#xff1f;上篇文章智哪儿谈了智能家居增长思维之流量思维 &#xff0c;这篇文章我…...

数据分析-深度学习 NLP Day2关键词提取案例

训练一个关键词提取算法需要以下几个步骤&#xff1a;1&#xff09;加载已有的文档数据集&#xff1b;2&#xff09;加载停用词表&#xff1b;3&#xff09;对数据集中的文档进行分词&#xff1b;4&#xff09;根据停用词表&#xff0c;过滤干扰词&#xff1b;5&#xff09;根据…...

LeetCode题解:938. 二叉搜索树的范围和,BFS,JavaScript,详细注释

原题链接&#xff1a; https://leetcode.cn/problems/range-sum-of-bst/ 解题思路&#xff1a; 对于二叉搜索树的任意节点&#xff0c;左子树的所有节点值都小于它的值&#xff0c;右子树的所有节点值都小于它的值。使用队列进行BFS搜索&#xff0c;如果当前节点的值小于low&…...

istio初步了解

istio 控制平面&#xff1a; Pilot&#xff1a;管理和配置部署在特定istio服务网格中的所有sidecar代理实例&#xff0c;管理sidecar代理之间的路由流量规则&#xff0c;并配置故障恢复功能&#xff0c;如超时、重试、熔断。 Citadel&#xff1a;istio中负责身份认证和证书管…...

【模板】用HTML编写邮件正文 | 各大邮箱几乎都会过滤css样式、js脚本等效果,如何用基础HTML编写?

用HTML编写邮件正文 文档 编码格式utf-8&#xff08;使用记事本或其他工具打开&#xff0c;在文件->另存为&#xff0c;编缉选择UTF-8格式&#xff09; 文档大小在15kb以内 样式 页面宽度&#xff1a;600px~800px 尽量用特殊元素以及元素属性代替样式 样式全部写为内联样式…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...