方法引用详解

news/2024/10/5 4:26:58/

什么是方法引用?:针对于函数式接口中的抽象方法

为什么用方法引用?:避免代码的重复,简便书写,提高效率

在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作

那么考虑一种情况:如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,那是否还有必要再写重复逻辑呢?答案肯定是没有必要

方法引用格式符号:  ::

方法引用的条件?:必须遵循

方法引用的分类:

1.引用静态方法

1.1 格式 

1.2 示例

为什么调用parseInt?符合方法调用要求,与函数式接口中的抽象方法形式相同,如下面的对比图

2.引用成员方法

2.1格式:其他类要创建成员对象

因为静态方法中,没有this,非要引用本类的静态成员方法的话:new 本类 ::方法名

3.引用构造方法

3.1 格式

3.2 示例

不使用方法引用:

使用方法引用:

添加符合方法引用的构造方法:

why:无需考虑对象的创建? answer:构造方法实现后自动会创建对象

4.特殊:使用类名调用成员方法

4.1 格式

特殊点:采用"使用类名调用成员方法"的引用方法时,stream流中的数据类型决定了我可以使用哪个类,不可以任意选择类,只能选择和stream流中的数据类型相同的

4.2 示例

不使用方法引用:Map是要改的主体

使用方法引用:

疑惑点:并不符合引用方法条件为啥也能用?

采用"使用类名调用成员方法"的引用方法时,参考这条:

map中第一个参数是string,而没有第二个参数,所以是无参的,而toUpperCase是无参的,

并且只能使用string类中的成员方法!!!

可以理解为:所以必须使用和stream中数据相同的类型的类

5.特殊:引用数组的构造方法

5.1 格式:就是生成一个:该数据类型的数组

5.2 示例:

不使用方法引用:

使用方法引用:直接integer::new

6.三道练习题

java">public class Test1 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"张三,23","李四,24","王五,25","大的的,27");list.stream().map(new Function<String, Student>() {@Overridepublic Student apply(String s) {return new Student(s.split(",")[0],Integer.parseInt(s.split(",")[1]));}});//将map的抽象方法使用:方法引用list.stream().map(Student::new).toArray(new IntFunction<Student[]>() {@Overridepublic Student[] apply(int value) {return new Student[value];}});//将toArray的抽象方法使用:方法引用Student[] arr = list.stream().map(Student::new).toArray(Student[]::new);System.out.println(Arrays.toString(arr));}
}

在student中:新写了一个构造方法,方便Map引用

重写tostring方法:


http://www.ppmy.cn/news/1473585.html

相关文章

2.Python学习:数据类型和变量

1.标识符命名规则 只能由数字、字母、下划线组成不能以数字开头不能是关键字&#xff08;如class等python内部已经使用的标识符&#xff09;区分大小写 查看关键字&#xff1a; print(keyword.kwlist)2.数据类型 2.1常见数据类型 2.1.1Number数值型&#xff1a; 整数int&a…

运维锅总详解CPU

本文从CPU简介、衡量CPU性能指标、单核及多核CPU工作流程、如何平衡 CPU 性能和防止CPU过载、为什么计算密集型任务要选择高频率CPU、超线程技术、CPU历史演进及摩尔定律等方面对CPU进行详细分析。希望对您有所帮助&#xff01; 一、CPU简介 CPU&#xff08;中央处理器&#…

ChatGPT:SpringBoot解决跨域问题方法-手动设置请求头

ChatGPT&#xff1a;SpringBoot解决跨域问题方法-手动设置请求头 这里的设置响应头是为了发送请求方还是接收请求方 设置响应头是为了发送请求方。具体来说&#xff0c;添加 Access-Control-Allow-Origin 头部是为了告诉浏览器&#xff0c;哪些域名可以访问资源。当设置为 * 时…

计算机网络——数据链路层(以太网扩展、虚拟局域网、高速以太网)

在许多情况下&#xff0c;我们希望把以太网的覆盖范围扩展。本节先讨论在物理层把以太网扩展&#xff0c;然后讨论在数据链路层把以太网扩展。这种扩展的以太网在网络层看来仍然是一个网络。 在物理层扩展以太网 现在&#xff0c;扩展主机和集线器之间的距离的一种简单方法就是…

抖音用户列表商家电话采集软件

功能: 可多关键词采集 可筛选粉丝数量和蓝V 可批量采集电话 当然可以&#xff01;以下是一个简单的抖音用户列表程序的示例&#xff1a; class DouyinUser:def __init__(self, username, followers, videos):self.username usernameself.followers followersself.videos…

02STM32环境搭建新建工程

STM32环境搭建&新建工程 软件安装&#xff1a;开发方式&新建工程步骤&架构 个人心得 软件安装&#xff1a; 安装Keil5 MDK 安装器件支持包 软件注册 安装STLINK驱动 安装USB转串口驱动 开发方式&新建工程步骤&架构 STM32开发方式&#xff1a; 1.寄存器 …

解决vscode配置C++编译带有中文名称报错问题

在新电脑上安装vscode运行带有中文路径和中文名称的C代码时遇到报错 根据别人的教程将laugh.json文件中"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",改成了"program": "${fileDirname}\\output\\test.exe",&#x…

30 - 最新2024版SpringCloud学习记录 - 项目版本选型

子曰&#xff1a;“学而时习之&#xff0c;不亦说乎&#xff1f;有朋自远方来&#xff0c;不亦乐乎&#xff1f;人不知而不愠&#xff0c;不亦君子乎&#xff1f;” 各个框架版本适配度&#xff0c;请严格按照官网文档。 SpringCloud vs SpringBoot vs SpringCloud Alibaba 版…