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

【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】方法引用与构造器引用

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

SGI 空间配置器

前言 空间配置器是 STL 六大组件之一&#xff0c;它总是隐藏在容器的背后&#xff0c;默默工作&#xff0c;默默付出。本文为《STL 源码剖析》读书笔记&#xff0c;主要讨论 SGI 版本空间的配置和释放&#xff0c;对代码进行解读时会改变一些写法&#xff0c;使其更易于阅读。…...

2023年白酒行业研究报告

第一章 行业概况 白酒是中国传统的酿酒业之一&#xff0c;历史悠久&#xff0c;源远流长。白酒指以高粱等粮谷为主要原料&#xff0c;以大曲、小曲或麸曲及酒母等为糖化发酵剂&#xff0c;经蒸煮、糖化、发酵、蒸馏、陈酿、勾兑而制成的&#xff0c;酒精度(体积分数)在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&#xff1a;什么意思 sr 和 z 这里又将模型设置为了训练模式 所以下面这部分代码应该是测试时运行的所有代码 这个就是测试时使用的网络模型框架 下面应该就是self.netG的网络模型框架 但是这个z的网络模型框架代码还不…...

C语言学习及复习笔记-【9】数组

目录9. 数组9.1 数组的定义9.2 数组与指针的区别9.3 数组大小计算9.4 数组的赋值9.5多维数组寻址方式9.6 函数数组9. 数组 9.1 数组的定义 C 语言支持数组数据结构&#xff0c;它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据&#xff0c;但它往往…...

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&#xff1a;在IDEA控制台为什么node显示不会出来命令 修改完之后记得重新启动电脑 问题2&#xff1a;response.end()作用 在Web开发中&#xff0c;浏览器端的请求到达服务器进行处理的时候&#xff0c;Response.End的作用就是让request执行到此结束&#xff0c;输出到客户…...

11 nacos源码开篇

nacos核心功能点&#xff1a; 服务注册&#xff1a;Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务&#xff0c;提供自身的元数据&#xff0c;比如ip地址、端口等信息。Nacos Server接收到注册请求后&#xff0c;就会把这些元数据信息存储在一个双层的内存…...

13.Jenkins集成sonarqube

Jenkins集成sonarqube1.jenkins集成sonarqube2.jenkins以maven的方式集成sonarqube scanner报错1报错21.jenkins集成sonarqube 1.在jenkins插件管理中安装sonarqube scanner 2.jenkins要知道sonarqube服务端是谁&#xff0c;需要配置&#xff08;系统管理–系统配置–sonarq…...

JavaWeb13-线程休眠和指定唤醒:LockSupport

目录 1.LockSupport.park()&#xff1a;休眠当前线程 2.LockSupport.unpark(线程对象)&#xff1a;唤醒某一个指定的线程 3.扩展&#xff1a;LockSupport.parkUntil(long)等待最大时间是一个固定时间 4.LockSupport和Interrupt 5.LockSupport VS wait 相同点&#xff1a;…...

【第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性)】

第一章&#xff1a;Spring概述、特点、IOC容器、IOC操作bean管理&#xff08;基于xml方式创建对象&#xff0c;注入属性&#xff09; 1.Spring是什么&#xff1f; ①Spring是一款主流的java EE 轻量级开源框架。 ②广义的Spring&#xff1a;Spring技术栈&#xff0c;Spring不再…...

前端react面试题(边面边更)

展示组件(Presentational component)和容器组件(Container component)之间有何不同 展示组件关心组件看起来是什么。展示专门通过 props 接受数据和回调&#xff0c;并且几乎不会有自身的状态&#xff0c;但当展示组件拥有自身的状态时&#xff0c;通常也只关心 UI 状态而不是…...

产品3C认证在哪里办理

​一、什么是CCC认证 3C认证的全称为“中国强制性产品认证”&#xff0c;英文名称China Compulsory Certification&#xff0c;英文缩写CCC。它是中国政府为保护消费者人身安全和国家安全、加强产品质量管理、依照法律法规实施的一种产品合格评定制度。年12月&#xff0c;国家…...

UA-DETRAC数据集转YOLO格式

一&#xff1a; 数据集下载 原官方数据集 链接&#xff1a;https://pan.baidu.com/s/1P_CeSIpJIYSA1dykmFhgYw 提取码&#xff1a; 7f4g 处理完成数据集&#xff08;每10帧取一张&#xff09; 链接&#xff1a;后续添加 提取码&#xff1a;后续添加 二&#xff1a; 处理标…...

代码随想录---二叉树的总结和二叉树的定义

二叉树的种类&#xff1a; 满二叉树&#xff1a;树的所有节点都是满&#xff0c;即都有左右孩子。 这棵二叉树为满二叉树&#xff0c;也可以说深度为k&#xff0c;有2^k-1个节点的二叉树。 完全二叉树&#xff1a;完全二叉树的定义如下&#xff1a;在完全二叉树中&#xff0c…...

2026年,探秘义乌一次性包装盒定做厂家的独特工艺与优质服务!

在商品包装需求日益多样化的今天&#xff0c;一次性包装盒的定制市场愈发繁荣。义乌&#xff0c;作为全球知名的小商品之都&#xff0c;拥有众多一次性包装盒定做厂家&#xff0c;它们以独特的工艺和优质的服务在市场中占据一席之地。今天&#xff0c;我们将走进一家具有代表性…...

终极指南:如何免费解锁Cursor Pro功能,彻底解决API限制问题

终极指南&#xff1a;如何免费解锁Cursor Pro功能&#xff0c;彻底解决API限制问题 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve …...

我发现了一个超级好用快速生成er图的工具

写论文、做毕设、搞数据库设计的小伙伴们&#xff0c;谁还在手动画 ER 图&#xff1f;Visio 太笨重、PowerDesigner 上手难、PPT 画出来不规范&#xff0c;调格式调半天&#xff0c;答辩还被老师说图不标准&#x1f62d; 最近我挖到一个免费、在线、一键生成的神器&#xff0c…...

终极游戏资源编辑指南:用ExtractorSharp轻松定制你的游戏世界

终极游戏资源编辑指南&#xff1a;用ExtractorSharp轻松定制你的游戏世界 【免费下载链接】ExtractorSharp Game Resources Editor 项目地址: https://gitcode.com/gh_mirrors/ex/ExtractorSharp 你是否曾梦想过打造独一无二的游戏外观&#xff1f;想要修改角色时装、调…...

[CD326(EpCAM)] 靶点技术深度解析:分子机制、抗体药物开发与未来趋势

在生物制药与细胞生物学研究领域&#xff0c;靶点的选择与机制解析是药物研发的基石。CD326&#xff08;EpCAM&#xff0c;上皮细胞黏附分子&#xff09; 作为一种广泛表达于上皮细胞表面的I型跨膜糖蛋白&#xff0c;不仅是上皮组织稳态维持的关键因子&#xff0c;更是当前抗体…...

突破Cursor限制的5个实用技巧:从原理到实践

突破Cursor限制的5个实用技巧&#xff1a;从原理到实践 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial request…...

2026年4月OpenClaw部署教程:阿里云快速部署OpenClaw、配置百炼APIKey、集成Skill详细方法

2026年4月OpenClaw部署教程&#xff1a;阿里云快速部署OpenClaw、配置百炼APIKey、集成Skill详细方法。OpenClaw&#xff08;原Clawdbot&#xff09;作为2026年主流的AI自动化助理平台&#xff0c;可通过阿里云轻量服务器实现724小时稳定运行&#xff0c;并快速接入钉钉&#x…...

探索iPad Pro的深度数据获取

在iOS开发中,获取深度数据是一个非常有趣的话题,特别是在使用双摄像头设备时。然而,当我们尝试将这些技术应用到iPad Pro上时,可能会遇到一些独特的挑战和限制。下面我们将深入探讨如何在iPad Pro上获取深度数据,以及为什么有些功能在iPad上不可用。 背景介绍 Apple在WW…...

大数据领域中分布式计算的性能优化策略

大数据领域中分布式计算的性能优化策略&#xff1a;解锁大数据处理的高效密码 关键词&#xff1a;大数据、分布式计算、性能优化、数据分区、负载均衡、通信优化 摘要&#xff1a;在大数据时代&#xff0c;分布式计算成为处理海量数据的关键技术。然而&#xff0c;如何优化分布…...

OpenWRT中通过Luci框架定制动态Web管理界面

1. Luci框架入门&#xff1a;从零理解MVC架构 第一次接触OpenWRT的Web管理界面时&#xff0c;我完全被Luci框架的简洁高效震惊了。这个基于Lua语言的轻量级框架&#xff0c;用最少的代码实现了路由器的完整配置管理。记得当时为了修改一个简单的网络参数&#xff0c;我翻遍了各…...