Java方法引用
2 方法引用
- 在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作
- 那么考虑一种情况: 如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,没有必要再写重复逻辑,如
usePrintable(s -> System.out.println(s));中System.out.println(s)就是重复逻辑 - 可以通过方法引用来使用已经存在的方案
2.1 方法引用符
-
方法引用符
::该符号为引用运算符,而它所在的表达式被称为方法引用
-
对比分析
- Lambda表达式:
usePrintable(s -> System.out.println(s));
分析:拿到参数s之后通过Lambda表达式,传递给System.out.println()方法去处理 - 方法引用:
usePrintable(System.out:println);//隐含了把s参数给println方法
分析:直接使用System.out中的println方法来取代Lambda,代码更加的简洁
- Lambda表达式:
-
推导与省略
- 如果使用Lambda,那么根据"可推导就是可省略”的原则,无需指定参数类型,也无需指定的重载形式,它们都将被自动推导
- 如果使用方法引用,也是同样可以根据上下文进行推导
- 方法引用是Lambda的李生兄弟(可以使用Lambda表达式就可以使用方法引用)
-
范例
package test;public class Demo {public static void main(String[] args) {//Lambda表达式usePrintable(i -> {System.out.println(i); //888});//方法引用usePrintable(System.out::println); //888}private static void usePrintable(Printable p) {p.printInt(888);}
}
2.2 引用类方法
-
常用方法引用
- 引用类方法
- 引用类的实例方法(成员方法)
- 引用对象的实例方法
- 引用构造器
-
引用类方法,其实就是引用类的静态方法
-
格式:
类名::静态方法 -
范例:
Integer::parselnt
Integer类的方法:public static int parseInt(String s)将此String转换为int类型数据 -
练习

-
接口类
package test;public interface Converter {int convert(String s);
}
- 测试类
package test;public class Demo {public static void main(String[] args) {
// useConverter(s -> {
// return Integer.parseInt(s);
// });useConverter(s -> Integer.parseInt(s)); //666//引用类方法useConverter(Integer::parseInt); //666//Lambda表达式被类方法替代时,他的形式参数全部传给静态方法做参数;如s字符串传递给parseInt方法}private static void useConverter(Converter c) {int number = c.convert("666");System.out.println(number);}
}
2.3 引用类的实例方法(成员方法)
-
引用类的实例方法,其实就是引用类中的成员方法
-
格式:
类名::成员方法 -
练习

-
接口
package test;public interface MyString {String mySubString(String s,int x,int y);
}
- 测试类
package test;public class Demo {public static void main(String[] args) {
// useMyString((String s,int x,int y)->{
// return s.substring(x, y); //llo
// });useMyString((s,x,y)-> s.substring(x, y)); // //llo//引用类中的实例方法useMyString(String::substring); //llo//Lambda表达式中的形式参数(s,x,y)//第一个参数作为调用者//后面的参数全部传给实例方法作为参数}public static void useMyString(MyString m) {String s = m.mySubString("HelloWorld", 2, 5);System.out.println(s);}
}
2.4 引用对象的实例方法(成员方法)
-
引用对象的实例方法,其实就引用类中的成员方法
-
格式:
对象名::成员方法 -
范例:
"HelloWorld"::toUpperCase
String类中的方法:public String toUpperCase()将此String所有字符转换为大写 -
练习

-
PrintString类
package test;public class PrintString {//把字符串转换成大写public void printUpper(String s) {String result = s.toUpperCase();System.out.println(result);}
}
- 接口
package test;public interface Printer {void printUpperCase(String s);
}
- 测试类
package test;public class Demo {public static void main(String[] args) {
// usePrinter((String s ) -> {
String result = s.toUpperCase();
System.out.println(result); //HELLO
// System.out.println(s.toUpperCase());
// });usePrinter(s -> System.out.println(s.toUpperCase()));//引用对象的实例方法PrintString ps = new PrintString();usePrinter(ps::printUpper); //HELLO}public static void usePrinter(Printer p) {p.printUpperCase("hello");}
}
2.5 引用构造器
-
引用构造器,就是引用构造方法
-
格式:
类名::new -
范例:
Student::new -
练习

-
测试类
package test;public class Demo {public static void main(String[] args) {
// useStudentBuilder((String name,int age) -> {
Student s =new Student(name,age);
return s;
// return new Student(name,age); //
// });useStudentBuilder((name, age) -> new Student(name, age));useStudentBuilder(Student::new); //小黑,10//Lambda表达式被引用构造器代替时,他的形式参数全部传递给构造器作为参数}public static void useStudentBuilder(StudentBuilder sb) {Student s = sb.build("小黑", 10);System.out.println(s.getName() + "," + s.getAge());}
}
相关文章:
Java方法引用
2 方法引用 在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作那么考虑一种情况: 如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,没有必要再写重复逻辑,如usePrintable…...
C++教程之迭代器Iterator
前言 之前的两篇文章我们主要了解了vector和string的相关知识,从中我们知道可以通过下标来访问vector的元素或者string的字符,但是除了这种方式还有一种更为通用的方式获取元素,那就是迭代器,这篇文章就会简单介绍迭代器的相关内…...
容联七陌:ChatGPT大模型能力为智能客服带来新方向
科技云报道原创。 近几个月来,大众对ChatGPT预期的持续走高,也影响到了智能客服领域公司的命运。 一方面,ChatGPT的出现为智能客服场景带来了更加“智能”的可能性;但另一方面,有人认为ChatGPT完全可以替代现有的智能…...
【Linux 多线程同步】使用同步和互斥实现生产消费模型
目录 1.同步的接口 2.多线程但是按顺序来执行 3.生产消费模型 4.使用互斥加同步实现生产消费模型 (采用环形队列) 同步:在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题 …...
【TypeScript】TypeScript的接口和对象类型(interface):
文章目录一、使用接口约束的时候不能多一个属性也不能少一个属二、重名interface 可以合并,继承三、可选属性 使用?操作符四、任意属性 [propName: string]五、只读属性 readonly,是不允许被赋值的只能读取六、添加函数一、使用接口约束的时候不能多一个…...
7、函数与异常
目录一、函数的概念二、匿名函数三、闭包四、defer五、异常机制一、函数的概念 函数的基本形式 //函数定义。a,b是形参 func argf(a int, b int) { a a b } var x, y int 3, 6 argf(x, y) //函数调用。x,y是实参函数参数: func arg2(a, b int) { //参数类型相…...
Julia 语言环境安装
Julia 语言支持以下系统: LinuxFreeBSDmacOSWindowsAndroid Julia 安装包下载地址为:Download Julia。 Github 源码地址:GitHub - JuliaLang/julia: The Julia Programming Language。 国内镜像地址:Index of /julia-releases/…...
5.1 线程
文章目录1.概述2.多线程的特性2.1 随机性2.2 CPU分时调度2.3 线程的状态2.4 线程状态与代码对照3.多线程代码实现方式1:继承Thread3.1 概述3.2 常用方法3.3 测试多线程的创建方式14.多线程代码实现方式2:实现Runnable接口4.1 概述4.2 常用方法4.3 练习2:测试多线程的…...
通讯录的实现
一、目的:使用C实现通讯录二、包含功能:添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人显示联系人:显示通讯录中所有联系人信息删除联系人:按照姓名进行删除指定联系人…...
Urho3D导航
Urho3D通过使用Recast和Detour库实现导航网格生成和路径查找。 导航功能通过NavigationMesh和Navigable组件公开。 NavigationMesh从已使用Navigable组件标记的子节点收集几何体。默认情况下,可导航组件的行为是递归的:除非禁用递归,否则也…...
【学习总结】激光雷达与相机外参标定:代码(cam_lidar_calibration)
前段时间尝试了一款激光雷达和相机标定的代码,总结了博客: 【学习总结】激光雷达与相机外参标定:原理与代码 但总觉得那个代码太差劲,而且精度不行,于是又找了些新的代码,体验比之前的好很多,在…...
车载技术开发—{Android CarFrameWork}
Android Automotive平台 Android Automotive是通过Android的通用框架,语言和API来实现的一个全栈,开源,高度可定制的平台。 Android Automotive与整个Android生态系统的关系 Android Automotive是Android的一部分。 Android Automotive不是…...
多城市二手车买卖发布管理小程序开发
多城市二手车买卖发布管理小程序开发 功能特性: 为你介绍二手车微信小程序的功能特性。 车辆分类搜索,支持按品牌、售价、年龄、上牌时间、排量等筛选。 车源发布,支持用户一键发布二手车,平台审核上线,发布可编辑、删除等操作。…...
企业级信息系统开发学习笔记1.2 初探Spring——利用组件注解符精简Spring配置文件
文章目录零、本讲学习目标一、课程引入二、打开项目 - SpringDemo三、利用组件注解符精简Spring配置文件(一)创建新包(二)复制四个类(三)修改杀龙任务类(四)修改救美任务类ÿ…...
37、基于51单片机乒乓球比赛系统设计
摘要 乒乓球游戏电路是一个对输入信号、输入时机正确与否的8个LED表示乒乓球球台和乒乓球,用数码管模拟显示器,显示比赛局数比分和每局玩家得分的电路。电路并不复杂,整体分为两个模块:一,游戏主模块;二&a…...
VMware虚拟机安装Win11最详细过程以及遇到的这台电脑无法运行Windows11的问题
准备工作 在使用VMware虚拟机安装Win11之前我们先把准备工作做好,以免后续思绪混乱导致出错。 1. 到VMware官网或点击链接下载正版VMware Workstation 16 Pro。 2. 双击打开安装包,点击下一步。 3. 阅读用户许可协议,勾选我接受许可协议中的…...
centos误删python2后怎么重新安装
此教程为离线安装 一. 先查询系统版本 cat /proc/version Linux version 3.10.0-1127.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Mar 31 23:36:51 UTC 2020 二. 安装python2.7.5(已知原python版…...
Qt 开发使用VSCode 笔记2
在之前有写过使用VSCode开发QT的笔记 Qt 开发使用VSCode 在以前的基础上继续学习记录写下《Qt 开发使用VSCode 笔记2》 该笔记相比之前的Qt 开发使用VSCode新加了如下内容: 工作区的使用使用Natvis进行Qt感知对象可视化通过vscode创建QT Quick项目 工作区的使用 …...
查找算法复习
先序在了解查找算法之前,需要熟悉几个概念,不然后面容易产生理解错误。查找表:即被查找的对象,通常由几个关键字组成。关键字:就是数据项、字段的意思。关键字有主次之分,其中主关键字取值是唯一的。查找长…...
腾讯前端必会面试题(必备)
如何提取高度嵌套的对象里的指定属性? 有时会遇到一些嵌套程度非常深的对象: const school {classes: {stu: {name: Bob,age: 24,}} }像此处的 name 这个变量,嵌套了四层,此时如果仍然尝试老方法来提取它: const {…...
ai辅助开发:让快马平台智能诊断并生成最优的wsl ubuntu环境配置方案
在折腾开发环境配置的路上,相信不少朋友都踩过WSL安装Ubuntu的坑。从选择版本、处理依赖到解决网络问题,整个过程就像开盲盒。最近尝试用AI辅助完成这个任务时,意外发现了一条捷径——通过智能交互就能生成量身定制的环境方案。 传统配置的痛…...
Spring Data Elasticsearch查询方法大全:从简单查询到复杂聚合的10个实战案例
Spring Data Elasticsearch查询方法大全:从简单查询到复杂聚合的10个实战案例 【免费下载链接】spring-data-elasticsearch Provide support to increase developer productivity in Java when using Elasticsearch. Uses familiar Spring concepts such as a templ…...
GNSS导航信号模拟器 卫星导航定位模拟器 GNSS卫星导航定位信号模拟器行业应用解决方案 GNSS模拟器
随着全球卫星导航系统的全面建设与深度应用,各类卫星导航定位授时终端已广泛渗透到交通、物联网、通信、测绘、消费电子等众多领域。但在终端产品的研发、测试、量产全流程中,行业长期面临诸多核心痛点:传统外场实地测试模式需投入大量人力物…...
从物流小哥,转行网络安全,是我这辈子最成功的选择
从月薪4000的物流小哥成功转行到月入上万的网络安全工程师,我是怎么做到的,下面说说我的亲身经历。 我叫阿强,我是26岁转行学网安的。说实在,转行就是奔着挣钱去的。我三流大学毕业,物流专业,学习能力一般…...
tao-8k性能优化小技巧:如何提升向量化与检索速度
tao-8k性能优化小技巧:如何提升向量化与检索速度 1. 理解tao-8k的性能瓶颈 1.1 模型架构特点 tao-8k作为支持8192长度上下文的嵌入模型,其核心优势在于长文本处理能力。然而,这种能力也带来了独特的性能挑战: 计算复杂度&…...
Qwen2.5-14B-Instruct开源模型落地:像素剧本圣殿短视频脚本批量生成
Qwen2.5-14B-Instruct开源模型落地:像素剧本圣殿短视频脚本批量生成 1. 项目概述 像素剧本圣殿(Pixel Script Temple)是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。它将顶尖的AI推理能力与8-Bit复古美学完美融合,…...
观测云产品更新 | 场景、管理、监控、LLM 监测、用户访问监测等
观测云更新 付费计划与账单 1、针对中国香港及全球区,短信与电话分别新增定价。 2、新增数据点数的计费模式。 场景 1、图表查询 > 外部数据源查询:新增 #{step} 动态变量支持: 支持在查询语句中使用 #{step}作为 interval 占位符&a…...
Scarab:空洞骑士模组管理的终极解决方案
Scarab:空洞骑士模组管理的终极解决方案 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 空洞骑士模组管理工具Scarab是专为《空洞骑士》玩家设计的自动化模组管理器…...
如何突破AI编程工具限制?三大核心方案助你效率倍增
如何突破AI编程工具限制?三大核心方案助你效率倍增 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial …...
WindowResizer:打破窗口限制,实现Windows窗口自由调整的终极解决方案
WindowResizer:打破窗口限制,实现Windows窗口自由调整的终极解决方案 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否曾遇到过某些应用程序窗口大小被…...
