Java基础数据结构之Lambda表达式

一.语法

基本语法:(parameters)->expression或者(parameters)->{statements;}

parameters:类似方法中的形参列表,这里的参数是函数式接口里面的参数。这里的参数可以明确说明,也可以不声明而由JVM隐含的推断。当只有一个推断类型是可以省略圆括号

->可以理解为被用于

方法体:可以是表达式,也可以是代码块,是函数时接口里方法的实现

举例

()->2 不需要参数,返回值是2;

x->3*x 只需要一个参数,返回该参数的二倍;

(x,y)->x+y 需要两个参数,返回他们的和;

(int x,int y)->x*y 两个参数,返回他们的乘积;

(String s)->System.out.println(s) 接收一个String对象并打印

二.函数式接口

1.定义

如果一个接口只有一个抽象方法,那么这个接口就是一个函数式接口

2.@FunctionalInterface注解

用了这个注解,就表示该接口是一个函数式接口,只能写一个抽象方法,如果多写了一个,就会报错。

3.可以有其他非抽象的方法

三.Lambda表达式的基本用法

首先准备以下六个函数式接口

如果没有Lambda表达式,应该如下调用:用到了匿名内部类,重写了test方法,如下:

以上六种函数式接口使用Lambda表达式如下:

注意,以上所有return语句的return###都可以直接如下写法:

四.变量的捕获

Lambda表达式当中存在变量的捕获,我们先通过匿名内部类来了解变量的捕获:

如上可以正常输出,但下面的代码就报错啦:

这是因为,所捕获的变量,要么是被final修饰,要么就得保证在使用之前没有被修改过,所以如下代码也会报错:

在Lambda表达式中也可以进行变量的捕获

同理,只可以是final修饰的常量或者从未修改过的变量

五.Lambda表达式在集合当中的使用

1.Collection接口,forEach()方法

该方法在Iterable接口中

它的参数是Consumer类型的,即实现了Consumer接口的一个对象,该Consumer接口就是一个函数式接口,它里面只有一个抽象方法accept方法:

那么我们该如何使用foreach方法呢?先看一下源码:

源码中将list中的元素依次传向了抽象方法accept,如果我们想打印list中的对象,就要如下使用Lambda表达式:

其中list.forEach((String s)-> System.out.println(s));表示要调用forEach方法,调用时传入一个实现了Consumer接口的对象,其中这个Consumer接口是一个函数式接口,有一个抽象方法accept,它只有一个参数String类型,无返回值。(String s)-> System.out.println(s)表示要对于传入的这个参数进行打印处理。

这个Lambda表达式就等价于:

2.sort()方法

还是像上面的分析方法,它传入了一个实现了Comparator接口的对象,它也是一个函数式接口,只有一个抽象方法compare,所以使用方法如下:

等价于:

3.Map接口,forEach()方法

先看源码:

参数是实现了BiConsumer接口的一个对象,这也是一个函数式接口:

要重写accept方法:

总之,Lambda表达式使得代码更加简洁,但是却是得代码的可读性变差了。

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

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

相关文章

C++实习报告(集合交,并,差运算的实现)

一、问题描述 1、问题描述 集合元素类型可以是整数、字符串和小数,实现集合的交、并、差运算。 2、功能要求 (1)用户能够输入两个集合元素; (2)能够完成集合的交、并、差运算; (3&a…

07. STP的基本配置

文章目录 一. 初识STP1.1. STP概述1.2. STP的出现1.3. STP的作用1.4. STP的专业术语1.5. BPDU的报文格式1.6. STP的选择原则(1)选择根桥网桥原则(2)选择根端口原则 1.7. 端口状态1.8. STP报文类型1.9. STP的收敛时间 二. 实验专题…

【MySQL 流浪之旅】 第六讲 浅谈 MySQL 锁

系列文章目录 【MySQL 流浪之旅】 第一讲 MySQL 安装【MySQL 流浪之旅】 第二讲 MySQL 基础操作【MySQL 流浪之旅】 第三讲 MySQL 基本工具【MySQL 流浪之旅】 第四讲 MySQL 逻辑备份【MySQL 流浪之旅】 第五讲 数据库设计的三个范式 目录 系列文章目录 一、什么是锁&#x…

07-Nacos-接入Mysql实现持久化

1、默认内嵌的数据库 Derby 存于/data目录 2、扩展仅支持Mysql 5.6.5 执行Nacos中的SQL脚本,该脚本是Nacos-server文件夹中的nacos-mysql.sql 详见 01-Nacos源码打包、部署-CSDN博客 3、修改配置文件 Nacos-server中的conf目录下,application.proper…

5种ai智能自动写作,让你的写作效率秒拔高

写作是一项需要耗费大量时间和精力的任务,但现在有了AI智能自动写作软件,我们可以轻松提高写作效率。在国内市场上,有许多优秀的写作软件可供选择。本文将向您推荐5款国内的写作软件,并详细说明每款软件的功能特点。 爱制作AI 使…

小项目:使用MQTT上传温湿度到Onenet服务器

前言 我们之前分别编写了 DHT11、ESP8266 和 MQTT 的代码,现在我们将它们仨整合在一起,来做一个温湿度检测小项目。这个项目可以实时地将 DHT11 传感器获取到的温湿度数据上传到 OneNET 平台。通过登录 OneNET,我们随时随地可以查看温湿度数…

山体滑坡在线安全监测预警系统(解决方案)

在近年来,随着全球气候变化的影响,山体滑坡等自然灾害频发,给人们的生命财产安全带来了严重威胁。为了有效预防和减少山体滑坡带来的危害,许多地方开始在山上安装山体滑坡在线安全监测预警系统(解决方案)。…

Java版大厂算法题1——数字颠倒

问题描述 输入一个整数&#xff0c;将这个整数以字符串的形式逆序输出&#xff0c;程序不考虑负数的情况&#xff0c;若数字含有0&#xff0c;则逆序形式也含有0。如果输入为100&#xff0c;则输出为001。 数据范围&#xff1a;0<n<(2^30)-1 * 输入描述&#xff1a;输入…

SpringBoot+SqlServer查询接口

SpringBootSqlServer查询接口 文章目录 SpringBootSqlServer查询接口1. pom环境配置2. common工具包3. 实体类接口映射4. Service层Controller层 需求&#xff1a;根据站号查询前一个小时的所有数据&#xff0c;将数据返回格式为Map<String,List<Map<String,String>…

【硬件产品经理】避免硬件产品失败 | 技术维度

目录 简介 技术维度一&#xff1a;低估产品开发 技术维度二&#xff1a;低估规模生产的复杂性 技术维度三&#xff1a;测试不足 技术维度四&#xff1a;产品太复杂 技术维度五&#xff1a;对客户承诺太高 推荐内容 简介 这节内容主要从技术维度来谈谈避免硬件产品失败这…

vue3封装el-pagination分页组件

1、效果如图&#xff1a; 2、分页组件代码&#xff1a; <template><div class"paging"><el-config-provider :locale"zhCn"><el-paginationv-model:current-page"page.currentPage"v-model:page-size"page.pageSize…

基于Prompt Learning的信息抽取

PTR: Prompt Tuning with Rules for Text Classification 清华&#xff1b;liuzhiyuan&#xff1b;通过规则制定subpromptRelation Extraction as Open-book Examination: Retrieval-enhanced Prompt Tuning Relation Extraction as Open-book Examination: Retrieval-enhance…

iPhone 14支持NFC吗?如果支持,那么怎么启用

你准备好通过启用NFC来释放iPhone 14的全部潜力了吗&#xff1f;如果你曾经想知道如何在你的设备上利用NFC&#xff0c;那么你就来对地方了。 在本综合指南中&#xff0c;我们将引导你完成在iPhone 14上激活NFC的步骤&#xff0c;使你能够无缝连接其他设备&#xff0c;进行非接…

github添加 SSH 密钥

1 打开终端 输入 ssh-keygen -t rsa -b 4096 -C "github邮箱地址"如果不需要密码可以一路回车 出现这个页面就是生存成功了 open ~/.ssh // 打开.ssh 找到id_rsa.pub复制出内容新建ssh密钥输入内容,保存即可

网络安全|重大失误!微软被盗测试账号拥有公司Office 365管理员权限

微软网络近期遭黑客入侵&#xff0c;高管电子邮件被监视长达两个月。 一位研究员表示&#xff0c;黑客通过获取一个拥有管理员权限的老旧测试帐号的访问权限来实施入侵&#xff0c;这是微软犯下的重大失误。 微软在1月25日&#xff08;上周四&#xff09;发布第二篇公告&…

Linux:重定向

Linux&#xff1a;重定向 输出重定向追加重定向输出重定向与追加重定向的本质输入重定向 输出重定向 在Linux中&#xff0c;输出重定向是一种将命令的输出发送到不同位置的方法。通常&#xff0c;执行命令时&#xff0c;输出会显示在终端上。然而&#xff0c;使用输出重定向&a…

vue3 + antd 封装动态表单组件(三)

传送带&#xff1a; vue3 antd 封装动态表单组件&#xff08;一&#xff09; vue3 antd 封装动态表单组件&#xff08;二&#xff09; 前置条件&#xff1a; vue版本 v3.3.11 ant-design-vue版本 v4.1.1 我们发现ant-design-vue Input组件和FormItem组件某些属性支持slot插…

数据写入HBase(scala)

package sourceimport org.apache.hadoop.hbase.{HBaseConfiguration, TableName} import org.apache.hadoop.hbase.client.{ConnectionFactory, Put} import org.apache.hadoop.hbase.util.Bytesobject ffff {def main(args: Array[String]): Unit {//hbase连接配置val conf …

Tensorflow2.0笔记 - tensor的padding和tile

本笔记记录tensor的填充和tile操作&#xff0c;对应tf.pad和tf.tile import tensorflow as tf import numpy as nptf.__version__#pad做填充 # tf.pad( tensor,paddings, modeCONSTANT,nameNone) #1维tensor填充 tensor tf.random.uniform([5], maxval10, dtypetf.int32) pri…

猫咪不吃东西怎么办?排行榜上适口性好、性价比高的生骨肉冻干推荐

猫咪不吃东西怎么办&#xff1f;遇到这类情况需要主人去观察猫咪的情况&#xff0c;如果猫咪除了不吃猫粮还出现了呕吐、腹泻、体温异常等其他情况就要考虑猫咪是不是生病了。如果排除了疾病原因&#xff0c;猫咪不吃东西怎么办&#xff1f;可能是猫粮的口感不佳&#xff0c;使…