《Java-SE-第三十五章》之方法引用
前言
在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!”
博客主页:KC老衲爱尼姑的博客主页
博主的github,平常所写代码皆在于此
共勉:talk is cheap, show me the code
作者是爪哇岛的新手,水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
文章目录
- 方法引用
- 1. 静态方法引用
- 2. 引用对象的实例方法
- 3. 引用类的实例方法
- 4. 构造器引用
方法引用
Java8引入了方法引用,其使用场景是,当我们使用lambda时,如果方法体中只有一个方法调用(包括构造方法),我们可以使用方法引用进一步简化代码。Java8中提供了四种不同类型的方法引用:静态方法引用,实例方法引用,构造方法引用。下面我们就来介绍这些方法引用。
1. 静态方法引用
基本格式:类名::方法名
使用前提
如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的静态方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个静态方法中,这个时候我们就可以引用类的静态方法。
示例代码
public class Demo8 {public static void main(String[] args) {List<User> users = Arrays.asList(new User("张三", "2222"), new User("李四", "3333"), new User("王五", "4444"));List<Integer> collect = users.stream().map(user -> user.getPassword()).map(Integer::valueOf).collect(Collectors.toList());System.out.println(collect);}
}
2. 引用对象的实例方法
基本格式:对象名::方法名
使用前提
如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个对象的成员方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个成员方法中,这个时候我们就可以引用对象的实例方法
示例代码
public class Demo8 {public static void main(String[] args) {List<User> users = Arrays.asList(new User("张三", "2222"), new User("李四", "3333"), new User("王五", "4444"));StringBuilder sb= new StringBuilder();//创建对象users.stream().map(user->user.getUsername()).forEach(sb::append);//使用方法}
}
3. 引用类的实例方法
基本格式:类名::方法名
使用前提
如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了第一个参数的成员方法,并且我们把要重写的抽象方法中剩余的所有的参数都按照顺序传入了这个成员方法中,这个时候我们就可以引用类的实例方法。
示例代码
public class Demo9 {public static String subAuthorName(String str, UseString useString){int start = 0;int length = 1;return useString.use(str,start,length);}public static void main(String[] args) {subAuthorName("bbbb", String::substring);}interface UseString{String use(String str,int start,int length);}
}
4. 构造器引用
如果方法体中的一行代码是构造器的话就可以使用构造器引用。
基本格式:类名::new
使用前提
如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的构造方法,并且我们把要重写的抽象方法中的所有的参数都按照顺序传入了这个构造方法中,这个时候我们就可以引用构造器。
示例代码
public class Demo8 {public static void main(String[] args) {List<User> users = Arrays.asList(new User("张三", "2222"), new User("李四", "3333"), new User("王五", "4444"));users.stream().map(User::getUsername).map(StringBuilder::new).map(sb->sb.append("cdd").toString()).forEach(System.out::println);}
}
各位看官如果觉得文章写得不错,点赞评论关注走一波!谢谢啦!。

相关文章:
《Java-SE-第三十五章》之方法引用
前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页:KC老衲爱尼姑的博客主页 博主的github,平常所写代码皆在于此 共勉:talk is cheap, show me the code 作者是爪哇岛的新手,水平很有限&…...
Effective Java笔记(33)优先考虑类型安全的异构容器
泛型最常用于集合,如 Set<E >和 Map<K ,V>,以及单个元素的容器 ,如 ThreadLocal<T>和 AtomicReference<T> 。 在所有这些用法中,它都充当被参数化了的容器 。 这样就限制每个容器…...
释放AI创作潜能:从大模型训练到高产力应用
文章目录 每日一句正能量前言什么是人工智能生成内容(AIGC)人工智能生成内容(AIGC)能做什么为什么要用人工智能生成内容(AIGC)创作成果用Java实现冒泡排序算法学生信息收集系统学生请假管理系统需求分析教务…...
Ajax 笔记(一)—— Ajax 入门
笔记目录 1. Ajax 入门1.1 Ajax 概念1.2 axios 使用1.2.1 URL1.2.2 URL 查询参数1.2.3 小案例-查询地区列表1.2.4 常用请求方法和数据提交1.2.5 错误处理 1.3 HTTP 协议1.3.1 请求报文1.3.2 响应报文 1.4 接口文档1.5 案例1.5.1 用户登录(主要业务)1.5.2…...
Android Studio跳过Haxm打开模拟器
由于公司权限限制无法安装Haxm,这个时候我们可以试试Arm相关的镜像去跳过Haxm运行模拟器。解决方案:安装API27以下的Arm Image. #ifdef __x86_64__if (sarch "arm64" && apiLevel >28) {APANIC("Avds CPU Architecture %s i…...
从一个GPU到多个GPU
在多GPU运行应用程序时,需要正确设计GPU之间的通信,GPU间数据传输的效率取决于GPU是如何连接在一个节点上并跨集群的 在多GPU系统里有两种连接方式 多GPU通过单个节点连接到PCIe总线上 多GPU连接到集群中的网络交换机上 /* * 本示例演示了如何使用 Open…...
小白编写一个Chrome
步骤 1:了解插件的基本结构和功能 首先,向小白解释什么是Chrome插件,它是如何工作的,以及它可以做什么。强调插件可以修改网页内容、添加功能等。 步骤 2:准备工作 安装Chrome浏览器:确保小白的计算机上…...
自然语言处理学习笔记(六)————字典树
目录 1.字典树 (1)为什么引入字典树 (2)字典树定义 (3)字典树的节点实现 (4)字典树的增删改查 DFA(确定有穷自动机) (5)优化 1.…...
WPF实战项目十一(API篇):待办事项功能api接口
1、新建ToDoController.cs继承基础控制器BaseApiController,但是一般业务代码不写在控制器内,业务代码写在Service,先新建统一返回值格式ApiResponse.cs: public class ApiResponse{public ApiResponse(bool status, string mess…...
ffmpeg给视频添加时间水印,准确且不模糊
ffmpeg -i {输入文件路径} -vf{drawtext} {输出文件路径} 针对视频模糊,加上 -b:v {输出视频码率};右键属性,可查看离线视频源码率; 针对离线视频文件加上时间水印,时间跳变不正常,加上-re; 整…...
① vue复习。从安装到使用
vue官网:cn.vuejs.org vue安装 cnpm install -g vue/cli 查看是否安装成功 vue --version 创建一个项目 vue create vue-demo(项目名称) 这个取消掉。空格可选中或者取消。 运行项目: cd 进入到项目下 npm run serve 运行成功后,访问这…...
【Linux】多线程——线程引入 | 线程控制
文章目录 一、Linux多线程1. 线程概念2. 线程创建3. 线程和进程4. 线程的优缺点 二、线程控制1. 线程创建2. 线程终止3. 线程等待4. 线程分离5. 线程局部存储 三、线程封装 一、Linux多线程 一级页表和二级页表都是key/val模型,一级页表的key是第一份的10个比特位&a…...
查询树形目录(内存遍历成树返回)
实体 Data TableName("dtp_sm_servicetype") ApiModel(value "SmServicetype对象", description "服务类型") EqualsAndHashCode(callSuper true) public class SmServicetype extends BaseEntity {ApiModelProperty("服务类型名称&quo…...
Easys Excel的表格导入(读)导出(写)-----java
一,EasyExcel官网: 可以学习一些新知识: EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 二,为什么要使用easyexcle excel的一些优点和缺点 java解析excel的框架有很多 : poi jxl,存在问题:非常的消耗内存, easyexcel 我们…...
纯净版ISO镜像下载大全(Windows、Linux、mac)
目录 一、前言介绍 前言必读 介绍 二、获取ISO镜像方式 (一)官方镜像下载 (二)获取下载方式 ps:回复的内容都是小写的 Windows操作系统 1.windows XP系统 2.Windows 7系统 3.Windows10系统 4.Windows11系…...
VMware上的Centos设置静态IP
服务器环境一般都是Centos7,而且很多软件在Linux环境上也能支持得更好,所以我需要在本机上使用虚拟机安装Linux,因为需要访问Linux上安装的软件,所以需要固定IP,不然每次更改也不方便。 基础环境准备 安装VMware在VM…...
【MySQL】数据库的基本操作
文章目录 1. 创建数据库1.1 创建数据库的语句1.2 创建一个数据库1.3 查看字符串与校验规则1.4 校验规则对数据库的影响 2. 删除数据库3. 查看数据库4. 修改数据库5. 备份与恢复5.1 数据库的备份与恢复5.2 表的备份与恢复 6. 查看数据库的连接情况 1. 创建数据库 1.1 创建数据库…...
Spring整合MyBatis(详细步骤)
Spring与Mybatis的整合,大体需要做两件事, 第一件事是:Spring要管理MyBatis中的SqlSessionFactory 第二件事是:Spring要管理Mapper接口的扫描 具体的步骤为: 步骤1:项目中导入整合需要的jar包 <dependency><!--Spring操作数据库需要该jar包…...
Linux:Shell编程之正则表达式
目录 绪论 1、正则表达式 1.1 通配符 1.2 正则表达式分类 1.3 基本正则 1.4 正则表达式中表示次数的表达式 1.5 位置锚定 1.5.1 词首锚定和词尾锚定 1.6 分组() 1.7 逻辑或 1.8 扩展正则 绪论 正则表达式:有一类特殊字符以及文本…...
Python Opencv实践 - 图像缩放
import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg_cat cv.imread("../SampleImages/cat.jpg", cv.IMREAD_COLOR) plt.imshow(img_cat[:,:,::-1])#图像绝对尺寸缩放 #cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) #指定Size大…...
云原生环境中的存储管理:从PV到StorageClass的全面指南
云原生环境中的存储管理:从PV到StorageClass的全面指南 🔥 硬核开场 各位技术大佬们,今天咱们来聊聊云原生环境中的存储管理。别跟我说你还在为容器存储问题头疼,那都2023年了!在云原生时代,存储是Kubernet…...
Highcharts 散点图:深入解析与最佳实践
Highcharts 散点图:深入解析与最佳实践 引言 散点图(Scatter Plot)是一种常用的数据可视化工具,它通过在二维坐标系中展示数据点来揭示变量之间的关系。Highcharts 是一个功能强大的 JavaScript 图表库,它支持多种图表类型,包括散点图。本文将深入探讨 Highcharts 散点…...
02-GlobalBurdenR包进阶-数据筛选与趋势地图绘制
1. GlobalBurdenR包数据筛选实战技巧 当你已经掌握了GlobalBurdenR包的基础数据读取功能后,接下来就要面对更实际的问题:如何从海量GBD数据中快速提取出我们需要的部分。这个环节就像在图书馆找书——如果不会使用检索系统,你可能会淹没在数…...
【数字IC】从UART协议到Verilog实现:一个IC工程师的实践指南
1. UART协议基础:从理论到硬件视角 第一次接触UART协议时,我被它"简单"的外表迷惑了——不就是起始位数据位停止位吗?直到真正用Verilog实现时,才发现这个看似简单的异步协议藏着不少坑。先说说UART的核心特点ÿ…...
3步搭建你的专属麻将AI教练:Akagi实战指南
3步搭建你的专属麻将AI教练:Akagi实战指南 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuki, with t…...
作为普通散户,我用ToClaw炒股 20 天的真实体验:到底是盯盘神器还是智商税?
作为普通散户,我用ToClaw炒股 20 天的真实体验:到底是盯盘神器还是智商税? 先交代一下背景。我是2019年入市的普通散户,本金不多,就十几万在股市里折腾。干过追涨杀跌、听过大V荐股、研究过K线指标,亏亏赚赚…...
别再每次新建项目都配一遍了!用VS2022属性表一劳永逸搞定OpenCV环境
VS2022属性表实战:打造可复用的OpenCV开发环境模板 每次新建项目都要重新配置OpenCV环境?这简直是开发者的噩梦。想象一下,你正在为一个紧急项目赶工,却被重复的环境配置拖慢了进度——这种低效操作早该被淘汰了。本文将带你用VS…...
Sketch 终极指南:Android 上最强大的图片加载库完全解析
Sketch 终极指南:Android 上最强大的图片加载库完全解析 【免费下载链接】sketch Sketch is an image loading library designed for Compose Multiplatform and Android View. It is powerful and rich in functions. In addition to basic functions, it also sup…...
granite-4.0-h-350m保姆级教程:Ollama本地大模型部署+函数调用+文本提取全流程
granite-4.0-h-350m保姆级教程:Ollama本地大模型部署函数调用文本提取全流程 想在自己的电脑上跑一个AI模型,但又担心配置复杂、资源不够?今天,我们就来手把手带你搞定一个轻量级的“全能选手”——Granite-4.0-H-350M。它只有3.…...
如何快速入门ESP32 Arduino开发:物联网项目的终极指南
如何快速入门ESP32 Arduino开发:物联网项目的终极指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 ESP32 Arduino核心是一个功能强大的开源项目,它让开发者能够…...
