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

news2024/11/16 1:40:39

一.语法

基本语法:(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.coloradmin.cn/o/1420269.html

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

相关文章

C++大学教程(第九版)7.30 打印array对象 7.31 逆序打印字符串(递归练习题)

文章目录 题目代码运行截图题目代码运行截图 题目 (打印array对象)编写一个递归函数printArray它以一个array对象一个开始下标和一个结束下标作为实参,不返回任何值并打印这个array对象。当开始下标和结束下标相等时,这个函数应该停止处理并返回。 代码…

关于paddleocr的predict_system按高度顺序画图

关于paddleocr的predict_system按高度顺序画图,(coco格式) 增加adjust_res函数: 实现代码: def adjust_res(res):res_cp deepcopy(res)res_cp sorted(res_cp, keylambda x: x[bbox][1], reverseFalse)return res …

西瓜书学习笔记——层次聚类(公式推导+举例应用)

文章目录 算法介绍实验分析 算法介绍 层次聚类是一种将数据集划分为层次结构的聚类方法。它主要有两种策略:自底向上和自顶向下。 其中AGNES算法是一种自底向上聚类算法,用于将数据集划分为层次结构的聚类。算法的基本思想是从每个数据点开始&#xff0…

mysql之基本查询

基本查询 一、SELECT 查询语句 一、SELECT 查询语句 查询所有列 1 SELECT *FORM emp;查询指定字段 SELECT empno,ename,job FROM emp;给字段取别名 SELECT empno 员工编号 FROM emp; SELECT empno 员工编号,ename 姓名,job 岗位 FROM emp; SELECT empno AS 员工编号,ename …

BUUCTFSQL注入(部分)

原来靶场不是最折磨的,新手做ctf才是 1.[极客大挑战 2019]LoveSQL 我一共做了三题,先来讲里面最简单的题吧 看见一个登录框,先尝试注入,发现会报错,而且不过滤# ,于是就开始常规操作 1 union select 1,d…

亚信电子推出新一代PCIe转多I/O (4S, 2S+1P, 2S+SPI, LB) 控制器

[台湾新竹讯, 2024年1月30日] 亚信电子(ASIX Electronics Corporation)持续深耕工业以太网芯片和I/O接口桥接器市场,在推出全新的EtherCAT从站转IO-Link主站网关和IO-Link设备软体协议栈解决方案之后,亚信今天再度推出最新一代的…

85.网游逆向分析与插件开发-物品使用-物品使用的逆向分析与C++代码的封装

内容参考于:易道云信息技术研究院VIP课 上一个内容:项目需求与需求拆解-CSDN博客 码云地址(ui显示角色数据 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:453dd83d54140d2e1ee65c9…

wpf 数据转换(Bytes 转 KB MB GB)

效果 后端 using ProCleanTool.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Data;namespace P…

RabbitMQ基本使用,docker安装RabbitMQ,SpringBoot整合RabbitMQ

1.拉取镜像 docker pull rabbitmq:3.9.15-management2.运行容器 docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIErabbitcookie rabbitmq:3.9.15-management3.访问地址 安装ip加端口号 http://192.168.123.3:156…

ToF传感器在移动机器人中的作用

原创 | 文 BFT机器人 在日新月异的机器人技术领域,技术的无缝整合正引领着人类与机器交互方式的革新潮流。ToF传感器作为变革性创新的一个例子,对移动机器人更好地感知周围环境起到了决定性的作用。 ToF传感器与激光雷达技术在创建深度图方面有着异曲同…

关于虚拟机ubuntu系统无法上网问题

一、虚拟机的连接方式 1、查看自己虚拟机的网络连接方式 选择虚拟机->右键设置->网络适配器 2、拓展——虚拟机的三种网络模式 2.1 首先安装虚拟机后,可以看到主机网络适配器多2张网卡 2.2 在VMware虚拟机中查看网络设置 点击菜单栏编辑 -> 虚拟网络…

C#,数据检索算法之三元搜索(Ternary Search)的源代码

数据检索算法是指从数据集合(数组、表、哈希表等)中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文发布 三元搜索(Ternary Search)的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.Algo…

Linux下安装edge

edge具有及其强大的功能,受到很多人的喜爱,它也开发Linux版本,下面是安装方法: 1.去edge官网下载Linux(.deb)文件。 https://www.microsoft.com/zh-cn/edge/download?formMA13FJ 2.下载之后输入以下指令(后面是安装…

华为radius认证

组网需求 如图1所示,用户同处于huawei域,Router作为目的网络接入服务器。用户需要通过服务器的远端认证才能通过Router访问目的网络。在Router上的远端认证方式如下: Router对接入用户先用RADIUS服务器进行认证,如果认证没有响应…

c#窗体捕捉方向键

方法1 实现方法参考代码: private void Form1_Load(object sender, EventArgs e){this.KeyPreview true;}protected override bool ProcessDialogKey(Keys keyData){if (keyData Keys.Left || keyData Keys.Right || keyData Keys.Up || keyData Keys.Down){s…

SpringBoot+SqlServer查询接口

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

Java基于SpringBoot+Vue的网上超市管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Linux的bash命令语法

可用点 #!/bin/bash # 文件要以上面开始,.sh结尾的文件不需要# 赋权文件可执行权限 chmod x <fileName># 获取java jar包启动的进程id ps -ef | grep *.jar | grep -v grep | awk {print $2}shell变量 变量命令规则&#xff1a; 只能包含字母、数字、下划线&#xff1…

jsjiami.v6加解密教学

1. 优点 a. 安全性提升 JavaScript 加密可以有效保护源代码&#xff0c;减少恶意用户的攻击风险。 b. 代码混淆 通过混淆技术&#xff0c;可以使代码变得难以阅读和理解&#xff0c;增加破解的难度。 c. 知识产权保护 对于商业项目&#xff0c;JavaScript 加密有助于保护…

GLOBALCHIP GC3909Pin to Pin兼容A3909/allegro电机驱动芯片产品参数分析,应用于摇头机,舞台灯,打印机,白色家电等

GLOBALCHIP GC3909 12V H 桥驱动器芯片替代A3909/Allegro产品概述: GC3909是一款双通道12V直流电机驱动芯片&#xff0c;为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用来驱动两个直流电机或者驱动一个步进电机。…