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

Java从入门到精通笔记篇(十三)

与流处理

ambda表达式

定义

lambda表达式不能被独立执行,因此必须实现函数式接口,并且会返回一个函数式接口的对象。

可将其语法用下列的方式理解

误区警示

“->”符号是由英文状态下的“-”和“>”组成的,符号之间没有空格。

lambda表达式中可以用“(a1,a2,a3)”的方法表示有参抽象方法,圆括号里的标识符对应抽象方法的参数。如果抽象方法中只有一个参数,lambda表达式则可以省略圆括号。

lambda表达式中的参数不需要与抽象方法的参数名称相同,但顺序必须相同。

lambda表达式调用外部变量

无法更改局部变量

局部变量在lambda表达式中默认被定义为final,lambda表达式只能调用局部变量,无法更改局部变量。

错误示范

可以更改类成员变量

lambda表达式可以调用并修改类成员变量的值。

lambda表达式只是描述了抽象方法是如何实现的,在抽象方法没有被调用前,lambda表达式中的代码并没有被执行,因此在运行抽象方法之前类成员变量的值不会发生变化。

只要抽象方法被调用,就会执行lambda表达式中的代码,类成员变量的值也就会被修改。

lambda表达式与异常处理

lambda表达式没有定义异常,但会默认抛出抽象方法原有的异常,当此方法被调用时则需要进行异常处理。

实例

创建自定义异常UnderAgeException,当发现用户是未成年人时进入此异常处理。创建函数式接口,在抽象方法中抛出UnderAgeException异常,使用lambda表达式实现此接口,并让接口对象执行抽象方法。

方法的引用

ambda表达式中方法也可以作为一个对象被调用。

引用静态方法

类名::静态方法名

::由两个英文冒号组成的操作符,冒号之间没有空格。

注意:语法中方法名是没有圆括号的。

引用成员方法

对象名::成员方法名

引用带泛型的方法

”::”操作符支持引用带泛型的方法。也支持引用带泛型的类。

与其他使用泛型的场景一样,要保证代码前后泛型一致

引用构造方法

lambda表达式有3种引用构造方法的语法,分别是引用无参构造方法、引用有参构造方法和引用数组构造方法

引用无参构造方法

类名::new

构造方法与类名相同,如果在操作符左右都写上类名,会让操作符误以为是在引用与类名相同的静态方法,这样会导致程序出现bug,所以在操作符右侧写上new关键字,表示引用构造方法。

注意:new关键字之后没有圆括号,也没有参数的定义。如果类中既有无参构造方法,又有有参构造方法,使用引用构造方法语法后,究竟哪一个构造方法被引用了呢?引用哪个构造方法是由函数式接口决定的,“::”操作符会返回与抽象方法的参数结构相同的构造方法。

例如,返回的是调用无参构造方法

引用有参构造方法与引用无参构造方法的语法一样。区别就是函数式接口的抽象方法是有参数的。

引用数组构造方法

类名[]::new

Function接口

使用lambda表达式都需要先创建或调用已有的函数式接口,但java.util.function包已经提供了很多预定义函数式接口。最常用的接口是Function<T,R>

T:被操作的类型,可以理解为方法参数类型。

R:操作结果类型,可以理解为方法的返回类型。

流处理

流处理有点类似数据库的SQL语句,可以执行非常复杂的过滤、映射、查找和收集功能,并且代码量很少。

Stream接口

流处理的接口都被定义在java.uil.stream包中。BaseStream接口是最基础的接口,但最常用的是BaseStream接口的一个子接口—Stream接口。

Stream接口是泛型接口,因此流中操作的元素可以是任何类的对象。

表中最后一列“类型”中有两种值:中间操作和终端操作。中间操作类型的方法会生成一个新的流对象,被操作的流对象仍然可以执行其他操作;终端操作会消费流,操作结束之后,被操作的流对象就不能再次执行其他操作了。这是二者的最大区别。

Collection接口新增两个可以获取流对象的方法。

可以获取集合的顺序流

Stream<E> stream();

获取集合的并行流

Stream<E> parallelstream();

Optional类

Optional类保存的值不会是null

Optional类由于是用final修饰的,因此不能有子类。

Optional类由于是带有泛型的类,因此可以保存任何对象的值。

Optional类中有一个叫作value的成员属性,这个属性就是用来保存具体值的。value是用泛型T修饰的,并且还用了final修饰,这表示一个Optional对象只能保存一个值。

数据过滤

filter()方法是Stream接口提供的过滤方法。

将lambda表达式作为参数,然后按照lambda表达式的逻辑过滤流中的元素。

过滤出想要的流元素后,还需Stream提供的collect()方法重新进行封装。

distinct()方法是Stream接口提供的过滤方法。该方法可以去除流中的重复元素,效果与SQL语句中的DISTINCT关键字一样。

limit()方法是Stream接口提供的方法,该方法可以获取流中前N个元素。

skip()方法是Stream接口提供的方法,该方法可以忽略流中的前n个元素。

数据映射

过滤是在流中找到符合条件的元素,映射是在流中获得具体的数据。

Stream接口提供了map()方法用来实现数据映射,map()方法会按照参数中的函数逻辑获取新的流对象,新的流对象中元素类型可能与旧流对象元素类型不相同。

数据查找

本节所讲的数据查找并不是在流中获取数据(这属于数据过滤),而是判断流中是否有符合条件的数据,查找的结果是一个boolean值或一个Optional类的对象。

allMatch()方法是Stream接口提供的方法,该方法会判断流中的元素是否全部符合某一条件,返回结果是boolean值。如果所有元素都符合条件,则返回true,否则返回false。

anyMatch()方法是Stream接口提供的方法,该方法会判断流中的元素是否有符合某一条件,只要有一个元素符合条件就返回true,如果没有元素符合条件,则会返回false。

noneMatch()方法是Stream接口提供的方法,该方法会判断流中的所有元素是否都不符合某一条件。这个方法的逻辑和allMatch()方法正好相反。

findFirst()方法是Stream接口提供的方法,这个方法会返回符合条件的第一个元素。注意这个方法的返回值不是boolean值,而是一个Optional对象。

数据收集

数据统计

数据分组

一级分组,就是将所有数据按照一个条件进行归类,而不再细分 。

Collectors类提供的groupingBy()方法就是用来进行分组的方法,方法参数是一个Function接口对象,收集器会按照指定的函数规则对数据分组。

分组规则是一个函数,这个函数是由Collectors收集器类调用的,而不是Stream流对象。

运行结果

多级分组

按照多个条件进行分组的

学校有100名学生,这些学生分布在3个年级中,这是一级分组,但每个年级还有若干个班级,学生被分到不同年级之后又被分到不同的班里,这就是二级分组。如果学生再被按男女分组,就变成了三级分组。元素按照两个以上的条件进行分组,就是多级分组。

运行结果

注意:

groupingBy()方法的参数不同

Map对象的嵌套,即从左数,第一个Map对象做了一级分组,第二个Map对象做了二级分组。

相关文章:

Java从入门到精通笔记篇(十三)

与流处理 ambda表达式 定义 lambda表达式不能被独立执行&#xff0c;因此必须实现函数式接口&#xff0c;并且会返回一个函数式接口的对象。 可将其语法用下列的方式理解 误区警示 “->”符号是由英文状态下的“-”和“>”组成的&#xff0c;符号之间没有空格。 lambd…...

嵌入式:STM32的启动(Startup)文件解析

相关阅读 嵌入式https://blog.csdn.net/weixin_45791458/category_12768532.html?spm1001.2014.3001.5482 启动文件(Startup File)是嵌入式系统开发中的核心组件之一&#xff0c;它用于初始化系统并为主程序的运行做好准备。在大多数情况下&#xff0c;启动文件是用汇编语言编…...

ElasticSearch学习笔记四:基础操作(二)

一、前言 上一篇文章中我们学习了ES中的基础操作&#xff0c;包括索引和映射&#xff0c;同时也学习了ES中的基础数据类型&#xff0c;今天我们继续学习其他的数据类型。 二、复杂数据类型 1、数组&#xff08;Array&#xff09; 在ES中没有特别指定数据类型&#xff0c;换…...

ODA-em-application.log太大处理

检查oda时发现u01使用率很高&#xff0c;层层排查到是em-application.log文件太大 orcl2:/u01/app/oracle/product/11.2.0.4/dbhome_1/oc4j/j2ee/OC4J_DBConsole_oda1_orcl/logoda1>du -sh * 57G em-application.log 2.2M global-application.log 92M …...

基于现金红包营销活动的开源 AI 智能名片与 S2B2C 商城小程序融合发展研究

摘要&#xff1a;本文深入剖析现金红包这一平台补贴的营销利器在消费场景中的多元应用&#xff0c;并将其与开源 AI 智能名片、S2B2C 商城小程序相融合&#xff0c;探讨其中蕴含的创新模式与商业价值。通过详尽解析各类现金红包的使用条件&#xff0c;阐述如何巧妙运用这些营销…...

远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接

前言&#xff1a;大家好&#xff01;今天我要教你们如何在树莓派5上安装Raspberry Pi OS&#xff0c;并配置SSH和VNC权限。通过这些步骤&#xff0c;你将能够在Windows电脑上使用VNC Viewer&#xff0c;结合Cpolar内网穿透工具&#xff0c;实现长期的公网远程访问管理本地树莓派…...

React中 setState 是同步的还是异步的?调和阶段 setState 干了什么?

React中 setState 是同步的还是异步的 1. React 的 setState 是异步的2. 为什么 setState 在合成事件和生命周期函数中是异步的3. 为什么 setState 在原生事件和定时器中是同步的4. 为什么要这样设计&#xff1f;调和阶段是什么setState在调和阶段干了什么&#xff1f;总结&…...

【D3.js in Action 3 精译_040】4.4 D3 弧形图的绘制方法

当前内容所在位置&#xff1a; 第四章 直线、曲线与弧线的绘制 ✔️ 4.1 坐标轴的创建&#xff08;上篇&#xff09; 4.1.1 D3 中的边距约定&#xff08;中篇&#xff09;4.1.2 坐标轴的生成&#xff08;中篇&#xff09; 4.1.2.1 比例尺的声明&#xff08;中篇&#xff09;4.1…...

C++设计模式:抽象工厂模式(风格切换案例)

抽象工厂模式&#xff08;Abstract Factory&#xff09;是一种创建型设计模式&#xff0c;其核心思想是&#xff1a;为一组相关或相互依赖的对象提供一个创建接口&#xff0c;而无需指定它们具体的类。简单来说&#xff0c;就是一个工厂可以生产一系列相关的对象。 我们接下来…...

搜维尔科技:Xsens随时随地捕捉,在任何环境下实时录制或捕捉

Xsens随时随地捕捉&#xff0c;在任何环境下实时录制或捕捉 搜维尔科技&#xff1a;Xsens随时随地捕捉&#xff0c;在任何环境下实时录制或捕捉...

爬虫基础总结 —— 附带爬取案例

Crawler —— Learning experience 数据的传输&#xff1a; 在OSI七层模型中&#xff0c;传输层为源主机和目标主机之间提供可靠的数据传输和通信服务&#xff0c;在该层中&#xff0c;有两个重要的协议—— TCP与 UDP协议。 TCP协议&#xff08;传输控制协议&#xff09; …...

图像处理学习笔记-20241118

文章目录 霍夫变换基本原理霍夫变换的步骤使用 OpenCV 实现直线检测示例&#xff1a;标准霍夫变换 示例&#xff1a;概率霍夫变换参数解释霍夫变换检测圆 基于GAN的样本生成GAN的基本原理基于GAN的数据增广流程实现代码示例 同态滤波&#xff08;Homomorphic Filtering&#xf…...

不能打开网页,但能打开QQ、微信(三种方式)

1.VPN错误 下面三个开关全关闭 2.DNS问题 WINR 输入CMD打开命令行 命令行输入 ipconfig/flushdns 重启电脑 3.直接火绒&#xff08;一键修复&#xff09;...

使用 start-local 脚本在本地运行 Elasticsearch

警告&#xff1a;请勿将这些说明用于生产部署 本页上的说明仅适用于本地开发。请勿将此配置用于生产部署&#xff0c;因为它不安全。请参阅部署选项以获取生产部署选项列表。 使用 start-local 脚本在 Docker 中快速设置 Elasticsearch 和 Kibana 以进行本地开发或测试。 此设…...

计算机网络:概述知识点及习题练习

网课资源&#xff1a; 湖科大教书匠 1、因特网 网络之间需要路由器进行互联&#xff0c;互联网是网络的网络&#xff0c;因特网是最大的互联网&#xff0c;连接到网络的设备称为主机&#xff0c;一般不叫路由器为主机。 因特网发展&#xff1a;ARPNET->三级结构因特网&am…...

python蓝桥杯刷题2

1.最短路 题解&#xff1a;这个采用暴力枚举&#xff0c;自己数一下就好了 2.门牌制作 题解&#xff1a;门牌号从1到2020&#xff0c;使用for循环遍历一遍&#xff0c;因为range函数无法调用最后一个数字&#xff0c;所以设置成1到2021即可&#xff0c;然后每一次for循环&…...

在openi平台 基于华为顶级深度计算平台 openmind 动手实践

大家可能一直疑问&#xff0c;到底大模型在哪里有用。 本人从事的大模型有几个方向的业务。 基于生成式语言模型的海事航行警告结构化解析。 基于生成式语言模型的航空航行警告结构化解析。 基于生成式生物序列&#xff08;蛋白质、有机物、rna、dna、mrna&#xff09;的多模态…...

KF UKF

我需要Kalman 现在&#xff0c;主要是用来处理检测问题情况里的漏检&#xff0c;因为模拟了一段2D&#xff0c; &#xff08;x&#xff0c;y&#xff09;的数据&#xff0c;为了看效果&#xff0c;画的线尽量简单一点&#xff1a; import numpy as np import matplotlib.pyplo…...

中伟视界:AI智能分析算法如何针对非煤矿山的特定需求,提供定制化的安全生产解决方案

非煤矿山智能化改造&#xff0c;除了政策文件&#xff0c;上级监管单位需要安装的AI智能分析算法功能之外的&#xff0c;矿方真正关心的&#xff0c;能解决矿方安全生产隐患的AI智能分析算法功能有哪些呢&#xff1f; 经过与矿方的现场交流沟通&#xff0c;收集第一现场人员对安…...

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色&#xff0c;类似材质丢失 Addressable Play Mode Script加载模式 选择 Use Existiing Build 1.Unity 切换到 PC 平台&#xff0c;执行 Addressable Build 运行&#xff0c;加载 bundle 内的预制体 显示正常 2.Unit…...

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义

Pytest-Bdd-Playwright 系列教程&#xff08;10&#xff09;&#xff1a;配置功能文件路径 & 优化场景定义 前言一、功能文件路径的配置1.1 全局设置功能文件路径1.2. 在场景中覆盖路径 二、避免重复输入功能文件名2.1 使用方法2.2 functools.partial 的背景 三、应用场景总…...

rust逆向初探

rust 逆向葵花宝典 rust逆向技巧 rust逆向三板斧&#xff1a; [!NOTE] 快速定位关键函数 (真正的main函数)&#xff1a;观察输出、输入&#xff0c;字符串搜索&#xff0c;断点等方法。定位关键 加密区 &#xff1a;根据输入的flag&#xff0c;打硬件断点&#xff0c;快速捕获…...

【Linux】apt 关闭 ssl 认证

【注意】apt 关闭 ssl 认证可能会引起软件安装风险&#xff0c;请尽量避免关闭。 执行以下命令可以实现全局关闭 sll 验证。 echo Acquire::https::Verify-Peer "false"; >> /etc/apt/apt.conf.d/99disable-signature-verificationecho Acquire::https::Verif…...

【算法】P5018 对称二叉树

题目 P5018 对称二叉树 https://www.luogu.com.cn/problem/P5018 代码 思路&#xff1a;领接表存储二叉树&#xff0c;unordered_map存储各个节点对应的值。dfs遍历一下各个子树的大小个数&#xff0c;再写个递归判断是否是对称二叉树&#xff0c;如果是就更新全局答案。 #…...

Unifying Top-down and Bottom-up Scanpath Prediction Using Transformers

Abstract 大多数视觉注意力模型旨在预测自上而下或自下而上的控制&#xff0c;这些控制通过不同的视觉搜索和自由观看任务进行研究。本文提出了人类注意力变换器&#xff08;Human Attention Transformer&#xff0c;HAT&#xff09;&#xff0c;这是一个能够预测两种形式注意力…...

JavaSE(十四)——文件操作和IO

文章目录 文件操作和IO文件相关概念Java操作文件文件系统操作文件内容操作字节流FileOutputStreamFileInputStream代码演示 字符流FileWriterFileReader代码演示 缓冲流转换流 案例练习 文件操作和IO 文件相关概念 文件 通常指的是包含用户数据的文件&#xff0c;如文本文件、…...

【视觉SLAM】4b-特征点法估计相机运动之PnP 3D-2D

文章目录 0. 前言1. PnP求解1.1 直接线性变换DLT1.2 P3P1.3 光束平差法BA2. 实现0. 前言 透视n点(Perspective-n-Point,PnP)问题是计算机视觉领域的经典问题,用于求解3D-2D的点运动。换句话说,当知道 N N N个世界坐标系中3D空间点的坐标以及它们在图像上的投影点像素坐标…...

android 性能分析工具(04)Asan 内存检测工具

1 Asan工具简介 1.1 Asan工具历史背景 AddressSanitizer&#xff08;ASan&#xff09;最初由Google开发&#xff0c;并作为LLVM项目的一部分。ASan的设计目的是帮助开发者检测并修复内存错误&#xff0c;如堆栈和全局缓冲区溢出、使用已释放的内存等&#xff0c;这些问题可能…...

html中select标签的选项携带多个值

搜索参考资料&#xff1a;SELECT标签中的选项可以携带多个值吗&#xff1f; 【摘抄】&#xff1a; 它可能有一个select选项中的多个值&#xff0c;如下所示。 <select id"ddlEmployee" class"form-control"> <option value"">-- S…...

Lambda表达式如何进行调试

一、概述 Java8提供了lambda表达式&#xff0c;方便我们对数据集合进行操作&#xff0c;我们使用lambda表达式的时候&#xff0c;是不是有这样的疑问&#xff0c;如何对执行过程中的中间数据进行调试呢&#xff1f; 二、例子 在下面的例子中&#xff0c;我们实现随机最多生成…...

网站设计师工资一般多少/bt磁力种子

1、CQRS架构 上面图中包含有很多的概念&#xff0c;先列举一下所涉及的概念&#xff1a; Command Bus&#xff08;命令总线&#xff09;&#xff1a;在 Command Handler 之前&#xff0c;可以看作是 Command 发布者。Command Handler&#xff08;命令处理器&#xff09;&#…...

著名网站建设公司/网络营销有哪些就业岗位

装饰者模式设计模式系列总览什么是装饰者模式普通示例装饰者模式示例类图关系装饰者模式使用场景装饰者模式优点装饰者模式缺点设计模式系列总览 设计模式飞机票三大工厂模式登机入口策略模式登机入口委派模式登机入口模板方法模式登机入口观察者模式登机入口单例模式登机入口…...

政务信息网站建设工作方案/学做电商需要多少钱

Created by laurenyangCreated by laurenyangCreated by laurenyangCreated by laurenyangLinuxLinux 下下部署部署 WebLogicWebLogicLinuxLinux 下下部署部署 WebLWebLogicogicWebLogic 是用来构建网站的必要软件&#xff0c;可用来解析、发布网页等功能&#xff0c;它是用纯 …...

网站建设期间怎么关闭网站/希爱力副作用太强了

AutoHotKey特殊键通用表达法 长云 2008-10-06 10:30 深入浅出地介绍一下最通用的做法。 名称与键值 所谓按下a、ctrl键&#xff0c;这里的a、ctrl只是一个名称&#xff0c;是给用户&#xff08;人&#xff09;看的名称。而在操作系统看来&#xff0c;区分每一个键的真正标准…...

在西宁做网站可以吗/友情链接查询结果

2019独角兽企业重金招聘Python工程师标准>>> 本文作者是来自 TiBoys 队的崔秋同学&#xff0c;他们的项目 TBSSQL 在 TiDB Hackathon 2018 中获得了一等奖。 TiDB Batch and Streaming SQL&#xff08;简称 TBSSQL&#xff09;扩展了 TiDB 的 SQL 引擎&#xff0c;支…...

wordpress手机怎么分享链接/已备案域名30元

顺序表 重点 函数指针与指针函数 关于函数指针与指针函数的概念&#xff0c;其实很好理解。 首先&#xff0c;我们要知道什么是函数&#xff0c;什么是指针。 函数&#xff1a;emm&#xff0c;通俗来讲就是把一系列操作封装好&#xff0c;然后有入口&#xff08;参数&#…...