【java 8】方法引用与构造器引用
📋 个人简介
- 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜
- 📝 个人主页:馆主阿牛🔥
- 🎉 支持我:点赞👍+收藏⭐️+留言📝
- 📣 系列专栏:java 小白到高手的蜕变🍁
- 💬格言:要成为光,因为有怕黑的人!🔥

目录
- 📋 个人简介
- 前言
- 什么是方法引用
- 方法引用的三种情况案例
- 情况一:对象::实例方法名
- 情况二:类::静态方法名
- 情况三:类::实例方法名
- 构造器引用
- 结语
前言
本节我总结结合Lambda表达式使用的方法引用,本质上还是Lambda表达式!
什么是方法引用
- 当要传递给 Lambda 体的操作,已经有实现的方法了,可以使用方法引用!
- 方法引用可以看做是 Lambda 表达式深层次的表达。换句话说,方法引用就是 Lambda 表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是 Lambda 表达式的一个语法糖。
- 要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致!
- 格式:使用操作符"::"将类(或对象)与方法名分隔开来。
- 有如下三种主要使用情况:
>对象::实例方法名
>类::静态方法名
>类::实例方法名
方法引用的三种情况案例
情况一:对象::实例方法名
public static void main(String[] args) {// 情况一:对象::实例方法名// Consumer 中的 void accept(T t)// void accept(T t) 与 打印流中的void println(T t) 参数类型和返回值一致,因此可以用方法引用// Lambda 表达式Consumer<String> con1 = str -> System.out.println(str);con1.accept("aniu1");// 方法引用改写PrintStream ps = System.out; //对象::实例方法名Consumer<String> con2 = ps::println;con2.accept("aniu2");}

情况二:类::静态方法名
// 情况二:类::静态方法// Comparator 中的 int compare(T t1,T t2)// int compare(T t1,T t2) 与 Integer中的int compare(T t1,T t2) 参数类型和返回值一致,因此可以用方法引用// Lambda 表达式Comparator<Integer> com3 = (t1,t2) -> Integer.compare(t1,t2);System.out.println(com3.compare(12, 21));// 方法引用改写Comparator<Integer> com4 = Integer::compare;System.out.println(com4.compare(12, 21));
情况三:类::实例方法名
// 情况三:类::实例方法名 (有难度)---前面方法引用的要求针对的是情况一和情况二,对情况三不适用// Comparator 中的 int compare(T t1,T t2)// String 中的 int t1.compareTo(t2) // T t1 作为compareTo的调用者,T的类型作为 类::实例方法名 中的类// Lambda 表达式Comparator<String> com5 = (s1,s2) -> s1.compareTo(s2);System.out.println(com5.compare("A", "B"));// 方法引用改写Comparator<String> com6 = String::compareTo;System.out.println(com6.compare("A", "B"));
这一块还是比较抽象的,多去理解,我不在多举例子!
构造器引用
和方法引用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致,抽象方法的返回值类型即为构造器所属的类的类型!
package 构造器引用;import java.util.function.Supplier;/*** @Author:Aniu* @Date:2023/2/23 21:33* @description TODO*/
public class Demo {public static void main(String[] args) {// 原始写法Supplier<People> sup1 = new Supplier<People>() {@Overridepublic People get() {return new People();}};sup1.get();// Lambda 表达式Supplier<People> sup2 = () -> new People();sup2.get();// 构造器引用// Supplier中的T get()// People 的空参构造器 People()Supplier<People> sup3 = People::new;sup3.get();}
}class People{String name;int age;public People(){System.out.println("空参构造器被调用啦!");}public People(int a){this.age = a;System.out.println("有参构造器被调用啦!");}
}

// Lambda 表达式Function<Integer,People> fun1 = id -> new People(id);fun1.apply(18);// 构造器引用// Function 中的R apply(T t) // 函数式接口// People 的有参构造器 People(T t)Function<Integer,People> fun4 = People::new;fun1.apply(18);

还有数组引用,这里不再总结,感兴趣的可以去了解!
结语
如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。
🏰系列专栏
👉软磨 css
👉硬泡 javascript
👉flask框架快速入门
相关文章:
【java 8】方法引用与构造器引用
📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言Ὅ…...
SGI 空间配置器
前言 空间配置器是 STL 六大组件之一,它总是隐藏在容器的背后,默默工作,默默付出。本文为《STL 源码剖析》读书笔记,主要讨论 SGI 版本空间的配置和释放,对代码进行解读时会改变一些写法,使其更易于阅读。…...
2023年白酒行业研究报告
第一章 行业概况 白酒是中国传统的酿酒业之一,历史悠久,源远流长。白酒指以高粱等粮谷为主要原料,以大曲、小曲或麸曲及酒母等为糖化发酵剂,经蒸煮、糖化、发酵、蒸馏、陈酿、勾兑而制成的,酒精度(体积分数)在18%-68%…...
华为OD机试 -合规数组(Java) | 机试题+算法思路+考点+代码解析 【2023】
合规数组 题目 给定一个正整数数组 检查数组中是否存在满足规则的数组组合 规则: A = B + 2C 输入 第一行输出数组的元素个数 接下来一行输出所有数组元素,用空格隔开 输出 如果存在满足要求的数 在同一行里依次输出规则里A B C的取值,用空格隔开 如果不存在输出0 示…...
华为OD机试真题Python实现【英文输入法】真题+解题思路+代码(20222023)
英文输入法 主管期望你来实现英文输入法单词联想功能,需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词。按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。注意 英文单词联想时区分大小写缩略形式如"don’t&quo…...
改进YOLO系列 | 添加轻量化Decouple_Head 和 ASFF_Head
绿色为ASFF_Head,浅蓝色Decoupled_Head,深蓝色是第三步加的_initialize_dh_biases方法后的效果。 参数量与计算量对比 模型参数量 parameters计算量GFLOPsyolov5s_Head723538916.5ASFF_Head1267484725.0Decoupled_Head892869722.0结构图 本篇介绍的这个Decouple_Head和YOLOX…...
LLFlow沦为和代码解读
LLFlow沦为和代码解读 1.测试时代码的运行位置 sr:什么意思 sr 和 z 这里又将模型设置为了训练模式 所以下面这部分代码应该是测试时运行的所有代码 这个就是测试时使用的网络模型框架 下面应该就是self.netG的网络模型框架 但是这个z的网络模型框架代码还不…...
C语言学习及复习笔记-【9】数组
目录9. 数组9.1 数组的定义9.2 数组与指针的区别9.3 数组大小计算9.4 数组的赋值9.5多维数组寻址方式9.6 函数数组9. 数组 9.1 数组的定义 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往…...
Kubernetes入门教程 --- 使用kubeadm进行集群安装
Kubernetes入门教程 --- 使用kubeadm和二进制安装1. Introduction1.1 架构图1.2 关键字介绍1.3 简述2. 使用Kubeadm Install2.1 申请三个虚拟环境2.2 准备安装环境2.3 配置yum源2.4 安装Docker2.5 时间同步2.6 安装组件2.7 部署集群2.8 Master安装网络插卡3. 查询状态3.1 查询n…...
华为OD机试真题Python实现【相对开音节】真题+解题思路+代码(20222023)
相对开音节 题目 相对开音节构成的结构为辅音+元音(aeiou)+辅音(r除外) 常见的单词有bike cake 给定一个字符串,以空格为分隔符 反转每个单词的字母 若单词中包含如数字等其他非字母时不进行反转 反转后计算其中含有相对开音节结构的子串个数 (连续子串中部分字符可以重复) …...
海思SD3403/SS928V100开发(5)MIPI_YUV相机vio sample开发----修改思路
1. 前言 sensor输出格式: YUV422 8bit 硬件连接: MIPI_YUV相机(4lane MIPI) -> SS928V100 MIPI0(4lane) 框图: 2. 几个问题 基于SS928 SDK中的 vio sample修改; 但是sample里面都是基于RAW RGB sensor开发的sample, 没有现成的MIPI_YUV sensor的参考,需要自己…...
javaee之node.js与es6
问题1:在IDEA控制台为什么node显示不会出来命令 修改完之后记得重新启动电脑 问题2:response.end()作用 在Web开发中,浏览器端的请求到达服务器进行处理的时候,Response.End的作用就是让request执行到此结束,输出到客户…...
11 nacos源码开篇
nacos核心功能点: 服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存…...
13.Jenkins集成sonarqube
Jenkins集成sonarqube1.jenkins集成sonarqube2.jenkins以maven的方式集成sonarqube scanner报错1报错21.jenkins集成sonarqube 1.在jenkins插件管理中安装sonarqube scanner 2.jenkins要知道sonarqube服务端是谁,需要配置(系统管理–系统配置–sonarq…...
JavaWeb13-线程休眠和指定唤醒:LockSupport
目录 1.LockSupport.park():休眠当前线程 2.LockSupport.unpark(线程对象):唤醒某一个指定的线程 3.扩展:LockSupport.parkUntil(long)等待最大时间是一个固定时间 4.LockSupport和Interrupt 5.LockSupport VS wait 相同点:…...
【第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性)】
第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性) 1.Spring是什么? ①Spring是一款主流的java EE 轻量级开源框架。 ②广义的Spring:Spring技术栈,Spring不再…...
前端react面试题(边面边更)
展示组件(Presentational component)和容器组件(Container component)之间有何不同 展示组件关心组件看起来是什么。展示专门通过 props 接受数据和回调,并且几乎不会有自身的状态,但当展示组件拥有自身的状态时,通常也只关心 UI 状态而不是…...
产品3C认证在哪里办理
一、什么是CCC认证 3C认证的全称为“中国强制性产品认证”,英文名称China Compulsory Certification,英文缩写CCC。它是中国政府为保护消费者人身安全和国家安全、加强产品质量管理、依照法律法规实施的一种产品合格评定制度。年12月,国家…...
UA-DETRAC数据集转YOLO格式
一: 数据集下载 原官方数据集 链接:https://pan.baidu.com/s/1P_CeSIpJIYSA1dykmFhgYw 提取码: 7f4g 处理完成数据集(每10帧取一张) 链接:后续添加 提取码:后续添加 二: 处理标…...
代码随想录---二叉树的总结和二叉树的定义
二叉树的种类: 满二叉树:树的所有节点都是满,即都有左右孩子。 这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。 完全二叉树:完全二叉树的定义如下:在完全二叉树中,…...
浔川代码编辑器 v4.1.0 正式版重磅上线!AI 加持,轻量高效,开箱即用
浔川代码编辑器 v4.1.0 正式版重磅上线!AI 加持,轻量高效,开箱即用基于 Python Tkinter SQLite3 深度打磨,浔川代码编辑器 v4.1.0 正式版今日全面发布!本次迭代全面整合内测优化成果,AI 助手、在线运行、…...
深度强化学习在自动驾驶赛车中的迁移优化实践
1. 项目概述:深度强化学习在自动驾驶赛车中的迁移优化在自动驾驶赛车领域,如何将仿真环境中训练的控制策略无缝迁移到真实车辆上一直是个棘手问题。传统方法通常面临两大挑战:仿真环境与真实物理世界之间的动力学差异(即所谓的&qu…...
图神经网络与神经算子:革新颗粒系统仿真的AI降阶建模
1. 项目概述:当图神经网络遇上颗粒世界在计算物理和工程仿真领域,颗粒系统(如沙土、粉末、谷物)的模拟一直是个“硬骨头”。传统的离散元法(DEM)虽然能精确刻画每个颗粒的牛顿运动方程和接触力学࿰…...
Atomic Layout测试策略:单元测试与集成测试最佳实践
Atomic Layout测试策略:单元测试与集成测试最佳实践 【免费下载链接】atomic-layout Build declarative, responsive layouts in React using CSS Grid. 项目地址: https://gitcode.com/gh_mirrors/at/atomic-layout 在现代前端开发中,构建可靠的…...
Unity局域网画面同步方案:FMETP STREAM低延迟多终端投射实战
1. 这不是“又一个网络同步教程”,而是解决真实产线卡点的局域网画面投射方案我第一次在客户现场看到这个需求时,是在一家做工业AR巡检系统的公司。他们刚部署完一批HoloLens 2和iPad,准备给产线工人做实时设备状态叠加显示——但问题来了&am…...
安卓Qwen Chat 国际版 无限AI生图 图生视频
最新 2.0.0 国际版限制更少应用名称:Qwen Chat 应用版本:2.0.0 应用大小:25 MB 适用平台:Android 使用说明: 软件介绍 Qwen Chat是一款强大的多功能AI助手应用,旨在提高您的工作效率和学习体验。&am…...
P15895 [TOPC 2025] One-Way Abyss 题解
P15895 [TOPC 2025] One-Way Abyss Link: https://www.luogu.com.cn/problem/P15895 题目描述 米蒂是一位勇敢的冒险家,正在探索一个名为“深渊”的神秘地下洞穴系统。深渊由 nnn 条垂直的竖井和 mmm 条水平的隧道组成。每条隧道恰好连接同一深度上的两条竖井。所…...
AI应用开发岗面经
1、请先做一下自我介绍。2、你的毕设作品,从产品需求设计到后续开发全流程,都是你一个人独立完成的吗?3、你为什么会选择做这个毕设项目?4、你在做这个项目的过程中,遇到的比较大的挑战是什么?5、你为什么会…...
基于PSO的多目标优化匿名化模型MO-OBAM:平衡隐私保护与数据效用的实战指南
1. 项目概述:当数据共享遇上隐私红线,我们如何破局?在数据驱动的时代,无论是医疗研究中的患者电子病历、金融风控中的信用记录,还是商业分析中的用户行为数据,其共享与分析都蕴含着巨大的价值。然而&#x…...
UE5小地图性能优化:SceneCapture2D+RenderTarget动态雷达实战
1. 为什么小地图不能只靠蓝图“拖一拖”就完事?在UE5项目里,我见过太多团队把小地图当成UI组件来处理——用一个Widget画个圆圈,再用几个蓝色小点代表队友,红色小点代表敌人,位置靠GetActorLocation硬算、角度靠FVecto…...
