方法引用详解

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

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

在使用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.三道练习题

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>() {
            @Override
            public 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[]>() {
            @Override
            public 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方法:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/778446.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之“栈”(全方位认识)

&#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;数据结构 前言 栈是一种数据结构&#xff0c;具有" 后进先出 "的特点 或者也可见说是 ” 先进后出 “。大家一起加油吧冲冲冲&#xff01;&#xff01; …

u盘存了东西却显示没有文件怎么办?原因分析与解决方案

在数字化时代&#xff0c;U盘已成为我们日常生活中不可或缺的存储设备。然而&#xff0c;有时我们可能会遇到一种令人困惑的情况&#xff1a;明明在U盘中存储了重要文件&#xff0c;但插上电脑后却显示没有文件。这种突如其来的“消失”不仅让人感到焦虑&#xff0c;更可能对我…

web前端开发——开发环境和基本知识

今天我来针对web前端开发讲解一些开发环境和基本知识 什么是前端 前端通常指的是网站或者Web应用中用户可以直接与之交互的部分&#xff0c;包括网站的结构、设计、内容和功能。它是软件开发中的一个专业术语&#xff0c;特别是指Web开发领域。前端开发涉及的主要技术包括HTML…

Windows ipconfig命令详解,Windows查看IP地址信息

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 ipconfig 1、基…

mac|Mac压缩与解压缩

1、系统自带的压缩软件。但是它能解压的格式很少 2、keka&#xff08;优点&#xff1a;体积小&#xff0c;没广告&#xff09; 支持压缩格式&#xff1a;7z&#xff0c;Zip&#xff0c;Tar&#xff0c;Gzip&#xff0c;Bzip2&#xff0c;DMG&#xff0c;ISO 支持的提取格式&…

计算机专业怎么选择电脑

现在高考录取结果基本已经全部出来了&#xff0c;很多同学都如愿以偿的进入到了计算机类专业&#xff0c;现在大部分同学都在为自己的大学生活做准备了&#xff0c;其中第一件事就是买电脑&#xff0c;那计算机类专业该怎么选择电脑呢&#xff1f; 计算机专业是个一类学科&…

golang线程池ants-实现架构

1、总体架构 ants协程池&#xff0c;在使用上有多种方式(使用方式参考这篇文章&#xff1a;golang线程池ants-四种使用方法)&#xff0c;但是在实现的核心就一个&#xff0c;如下架构图&#xff1a; 总的来说&#xff0c;就是三个数据结构&#xff1a; Pool、WorkerStack、goW…

性能测试相关理解(一)

根据学习全栈测试博主的课程做的笔记 一、说明 若未特别说明&#xff0c;涉及术语都是jmeter来说&#xff0c;线程数&#xff0c;就是jmeter线程组中的线程数 二、软件性能是什么 1、用户关注&#xff1a;响应时间 2、业务/产品关注&#xff1a;响应时间、支持多少并发数、…

Oracle 11.2.0.1升级到11.2.0.4并做rman备份异机恢复

下载好数据库升级包&#xff0c;想去Oracle官网下载的&#xff0c;提示没有授权 只能在csdn找付费的了&#xff0c;9块1个&#xff0c;下载了前2个。 注意&#xff0c;总共有7个包&#xff0c;如果Oracle是安装在linux服务器&#xff0c;且无图形界面管理的 只需要第一&#xf…

Java面试八股之如何提高MySQL的insert性能

如何提高MySQL的insert性能 提高MySQL的INSERT性能可以通过多种策略实现&#xff0c;以下是一些常见的优化技巧&#xff1a; 批量插入&#xff1a; 而不是逐条插入&#xff0c;可以使用单个INSERT语句插入多行数据。例如&#xff1a; INSERT INTO table_name (col1, col2) V…

C++笔试强训2

文章目录 一、选择题二、编程题 一、选择题 和笔试强训1的知识点考的一样&#xff0c;因为输出的是double类型所以后缀为f,m.n对其30个字符所以m是30&#xff0c;精度是4所以n是4&#xff0c;不加符号默认是右对齐&#xff0c;左对齐的话前面加-号&#xff0c;所以答案是-30.4f…

最新扣子(Coze)实战案例:使用扩图功能,让你的图任意变换,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 微信关注公从号&#xff1a;斜杠君&#xff0c;可获取完整版教程。&a…

深入探索C语言中的结构体:定义、特性与应用

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 目录 结构体的介绍结构体定义结构成员的类型结构体变量的定义和初始化结构体成员的访问结构体传参 结构体的介绍 在C语言中&#xff0c;结构体是一种用户自定义的数据类型&#xff0c;它允许开发者将不同类型的变量组合在一起…

MySQL数据库树状结构查询

一、树状结构 MySQL数据库本身并不直接支持树状结构的存储&#xff0c;但它提供了足够的灵活性&#xff0c;允许我们通过不同的方法来模拟和实现树状数据结构。具体方法看下文。 数据库表结构&#xff1a; 实现效果 查询的结果像树一样 二、使用 以Catalog数据表&#xff0c…

lua入门(1) - 基本语法

本文参考自&#xff1a; Lua 基本语法 | 菜鸟教程 (runoob.com) 需要更加详细了解的还请参看lua 上方链接 交互式编程 Lua 提供了交互式编程模式。我们可以在命令行中输入程序并立即查看效果。 Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用&#xff1a; 如下图: 按…

深度解析Ubuntu版本升级:LTS版本升级指南

深度解析Ubuntu版本升级&#xff1a;Ubuntu版本生命周期及LTS版本升级指南 Ubuntu是全球最受欢迎的Linux发行版之一&#xff0c;其版本升级与维护策略直接影响了无数用户的开发和生产环境。Canonical公司为Ubuntu制定了明确的生命周期和发布节奏&#xff0c;使得社区、企业和开…

Micron近期发布了32Gb DDR5 DRAM

Micron Technology近期发布了一项内存技术的重大突破——一款32Gb DDR5 DRAM芯片&#xff0c;这项创新不仅将存储容量翻倍&#xff0c;还显著提升了针对人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;、高性能计算&#xff08;HPC&#xff09;以及数…

Wireshark网络抓包工具入门指南

目录 引言 安装抓包工具 抓包基础概念 抓包步骤 流程 抓包工具头的分析 14.3 以太网的完整帧格式 粘包与拆包现象解析及解决方案 发生原因 解决方案 14.3.1以太网头 14.3.2 IP头 14.3.3 UDP头 14.3.4 TCP头 引言 Wireshark是一款功能强大的开源网络协议分析器&am…

SpringMVC:SpringMVC执行流程

文章目录 一、介绍二、什么是MVC 一、介绍 Spring MVC 是一种基于Java的Web框架&#xff0c;它采用了MVC&#xff08;Model - View - Controller&#xff09;设计模式&#xff0c;通过吧Model、View和Controller分离&#xff0c;将Web层进行职责解耦&#xff0c;把复杂的Web应…

C++|哈希应用->布隆过滤器

目录 一、概念 二、模拟实现 三、布隆过滤器扩展应用 上一篇章学习了位图的使用&#xff0c;但它只适用于整数&#xff0c;对于要查询字符串是否在不在&#xff0c;位图并不能解决。所以针对这一问题&#xff0c;布隆过滤器可以派上用场&#xff0c;至于布隆过滤器是什么&am…