5、函数式编程--方法引用

news2024/12/27 0:07:05

目录

    • 6. 方法引用
      • 6.1 推荐用法
      • 6.2 基本格式
      • 6.3 语法详解(了解)
        • 6.3.1 引用类的静态方法
          • 格式
          • 使用前提
        • 6.3.2 引用对象的实例方法
          • 格式
          • 使用前提
        • 6.3.4 引用类的实例方法
          • 格式
          • 使用前提
        • 6.3.5 构造器引用
          • 格式
          • 使用前提

6. 方法引用

​ 我们在使用lambda时,如果方法体中只有一个方法的调用的话(包括构造方法),我们可以用方法引用进一步简化代码。

用来进一步简化 Lambda 语法

6.1 推荐用法

​ 我们在使用lambda时不需要考虑什么时候用方法引用,用哪种方法引用,方法引用的格式是什么。我们只需要在写完lambda方法发现方法体只有一行代码,并且是方法的调用时使用快捷键尝试是否能够转换成方法引用即可。

​ 当我们方法引用使用的多了慢慢的也可以直接写出方法引用。

6.2 基本格式

​ 类名或者对象名::方法名

6.3 语法详解(了解)

6.3.1 引用类的静态方法

​ 其实就是引用类的静态方法

格式
类名::方法名
使用前提

​ 如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的静态方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个静态方法中,这个时候我们就可以引用类的静态方法。

str.xx().sss().uuu() 这样的不能算是一行代码,因为是调用多个方法了,只是调用一个方法的话,才能称为一行代码

例如:

如下代码就可以用方法引用进行简化

        List<Author> authors = getAuthors();

        Stream<Author> authorStream = authors.stream();
        
        authorStream.map(author -> author.getAge())
                .map(age->String.valueOf(age));

注意,如果我们所重写的方法是没有参数的,调用的方法也是没有参数的也相当于符合以上规则。

优化后如下:

        List<Author> authors = getAuthors();

        Stream<Author> authorStream = authors.stream();

        authorStream.map(author -> author.getAge())
                .map(String::valueOf);

打印的结果都是一样,只要是idea的alt+enter快捷键可以使用的,就能直接用

在这里插入图片描述

6.3.2 引用对象的实例方法
格式
对象名::方法名
使用前提

​ 如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个对象的成员方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个成员方法中,这个时候我们就可以引用对象的实例方法

例如:

        List<Author> authors = getAuthors();

        Stream<Author> authorStream = authors.stream();
        StringBuilder sb = new StringBuilder();
        authorStream.map(author -> author.getName())
                .forEach(name->sb.append(name));

优化后:

        List<Author> authors = getAuthors();

        Stream<Author> authorStream = authors.stream();
        StringBuilder sb = new StringBuilder();
        authorStream.map(author -> author.getName())
                .forEach(sb::append);
6.3.4 引用类的实例方法
格式
类名::方法名
使用前提

​ 如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了第一个参数的成员方法,并且我们把要重写的抽象方法中剩余的所有的参数都按照顺序传入了这个成员方法中,这个时候我们就可以引用类的实例方法。

例如:

 interface UseString{
        String use(String str,int start,int length);
    }

    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("三更草堂", new UseString() {
            @Override
            public String use(String str, int start, int length) {
                return str.substring(start,length);
            }
        });

	}

优化后如下:

    public static void main(String[] args) {

        subAuthorName("三更草堂", String::substring);

    }

分析图:

在这里插入图片描述

6.3.5 构造器引用

​ 如果方法体中的一行代码是构造器的话就可以使用构造器引用。

格式
类名::new
使用前提

​ 如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的构造方法,并且我们把要重写的抽象方法中的所有的参数都按照顺序传入了这个构造方法中,这个时候我们就可以引用构造器。

例如:

        List<Author> authors = getAuthors();
        authors.stream()
                .map(author -> author.getName())
                .map(name->new StringBuilder(name))
                .map(sb->sb.append("-三更").toString())
                .forEach(str-> System.out.println(str));

优化后:

        List<Author> authors = getAuthors();
        authors.stream()
                .map(author -> author.getName())
                .map(StringBuilder::new)
                .map(sb->sb.append("-三更").toString())
                .forEach(str-> System.out.println(str));

构造器引用分析图
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何加入开源项目维护并提交代码?本地搭建源码阅读开发构建环境示例: kafka

如何加入开源项目维护并提交代码?本地搭建源码阅读开发构建环境示例: kafka。 大家对开源项目有兴趣、想成为committer,或者工作需要,会从github上获取最新的开源项目源码。本文做一个示例,怎样搭建本地的源码阅读、开发、构建环境。 首先,在github上找到项目的链接,…

OS 进程的描述与控制

目录 前趋图 程序执行 程序顺序执行 程序并发执行 进程 定义 进程控制块 PCB 进程实体 进程 特征 动态性 并发性 独立性 异步性 状态 3 种基本状态 就绪状态 执行状态 阻塞状态 3 种基本状态间的转换 其他状态 创建状态 终止状态 进程 5 种状态及其转换…

创建JUnit4 的TestBase类

Slf4j RunWith(SpringRunner.class) SpringBootTest(classes {TestApplication.class},webEnvironment SpringBootTest.WebEnvironment.RANDOM_PORT) public class TestBase { } 如图&#xff1a;

基于Bert模型的中文语义相似度匹配算法(离线模式)

1、准备中文离线模型 配置文件夹 文件获取方法&#xff1a; 访问官网&#xff1a;https://huggingface.co/bert-base-chinese/tree/main 下载以下文件 2、测试代码 # -*- coding: utf-8 -*- #pip install transformers -i https://mirrors.aliyun.com/pypi/simple/ #pip …

2023年中国机场建设标准、机场数量及机场系统投资完成情况分析[图]

机场&#xff0c;亦称飞机场、空港&#xff0c;较正式的名称是航空站。机场有不同的大小&#xff0c;除了跑道之外&#xff0c;机场通常还设有塔台、停机坪、航空客运站、维修厂等设施&#xff0c;并提供机场管制服务、空中交通管制等其他服务。 机场建设资质等级标准 资料来源…

当遇到修复错误0xc000000e时,你的电脑需要修复。如何在Windows 11/10上修复此错误

恢复错误代码0xc000000e,你的电脑需要修复,表示硬件故障或驱动器配置不正确,并可能伴随不同的错误消息,如: 所需设备未连接或无法访问 无法加载所选条目 由于应用程序丢失或损坏,无法加载所选条目 启动选择失败,因为无法访问所需的设备。 0xC000000E或STATUS_NO_SUCHDEV…

MBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸

编辑&#xff1a;ll MBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸 型号&#xff1a;MBR20100CT 品牌&#xff1a;ASEMI 芯片个数&#xff1a;2 封装&#xff1a;TO-220 恢复时间&#xff1a;&#xff1e;50ns 工作温度&#xff1a;-65C~175C 浪涌电流&#xff1a…

LeetCode //C++ - 427. Construct Quad Tree

427. Construct Quad Tree Given a n * n matrix grid of 0’s and 1’s only. We want to represent grid with a Quad-Tree. Return the root of the Quad-Tree representing grid. A Quad-Tree is a tree data structure in which each internal node has exactly four c…

2023年中国脱硫石膏产量、均价、综合利用量及市场规模分析[图]

脱硫石膏主要成分和天然石膏一样&#xff0c;为二水硫酸钙CaSO42H2O&#xff0c;含量≥93%。脱硫石膏是FGD过程的副产品&#xff0c;FGD过程是一项采用石灰-石灰石回收燃煤或油的烟气中的二氧化硫的技术&#xff0c;其中2022年中国脱硫石膏产量同比增长2.0%&#xff1b;综合利用…

[已解决]llegal target for variable annotation

llegal target for variable annotation 问题 变量注释的非法目标 思路 复制时编码错误&#xff0c;自己敲一遍后正常运行 #** 将垂直知识加入prompt&#xff0c;以使其准确回答 **# prompt_templates { # "recommand":"用户说&#xff1a;__INPUT__ …

上抖音热搜榜需要做哪些准备?

要想在抖音上获得高曝光&#xff0c;首先需要了解抖音热搜榜的算法和规则。抖音热搜榜的排名主要取决于作品的点赞数、评论数、分享数和播放量。其中&#xff0c;播放量是影响排名的关键因素。因此&#xff0c;在创作作品时&#xff0c;要注重提高作品的播放量。此外&#xff0…

最新JustMedia V2.7.3主题破解版去授权WordPress主题模板

JustMedia主题是一款针对有图片或者视频发布需求的网站量身定制开发的wordpress主题&#xff0c;适合各类图片展示类网站使用。 同时JustMedia主题首次加入了我们WPCOM团队独立自主开发的前端用户中心模块&#xff0c;相比用户中心插件可提供更好的体验效果。 新版用户中心为…

麒麟kylinOS 2303通过模板设置电源

原文链接&#xff1a;麒麟kylinOS 2303上通过模板设置电源 hello&#xff0c;大家好啊&#xff0c;今天给大家带来一篇在麒麟kylinOS 2303上通过模板设置电源的文章&#xff0c;主要通过开机启动脚本实现&#xff0c;开机脚本内容主要为gsettings的设置&#xff0c;关于gestati…

超简单小白攻略:如何利用黑群晖虚拟机和内网穿透实现公网访问

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是前排提醒&#xff1a; 1. 搭建群晖虚拟机1.1 下载黑群晖文件vmvare虚拟机安装包1.2 安装VMware虚拟机&#xff1a;1.3 解压黑群晖虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群晖的解…

在 GeoServer 上发布 Shapefile 文件作为 WMS 数据

首先需要有 java 环境:https://zhuhukang.blog.csdn.net/article/details/132814744 1. 数据发布 点击数据存储,添加存储Shapefile 文件数据源添加 新建矢量数据源 点击保存,然后跳转下个页面进行发布 查找选择4326,然后从数据中进行计算 查看

SpringBoot整合Activiti7——执行监听器(六)

文章目录 一、执行监听器事件类型生命周期配置方式(选)代码实现xml文件创建监听器class方法expression方法delegateExpression 测试流程部署流程启动流程完成任务 一、执行监听器 在流程实例执行过程中触发某个事件时&#xff0c;Activiti提供的执行监听器可以捕获该事件并执行…

AI原生应用速通指南

作者 | 百度文库APP 导读 百度创始人、董事长兼首席执行官李彦宏早在今年年初所预测的&#xff1a;大模型时代最大的机会在于应用层&#xff0c;会出现“杀手级”应用。 全文4448字&#xff0c;预计阅读时间12分钟。 前言 “我们要让AI走下技术的“神坛”&#xff0c;深入应用的…

强化学习与视觉语言模型之间的碰撞,UC伯克利提出语言奖励调节LAMP框架

文章链接&#xff1a; https://arxiv.org/abs/2308.12270 代码仓库&#xff1a; https://github.com/ademiadeniji/lamp 在强化学习&#xff08;RL&#xff09;领域&#xff0c;一个重要的研究方向是如何巧妙的设计模型的奖励机制&#xff0c;传统的方式是设计手工奖励函数&…

微信小程序修改van-popup的背景颜色

效果图&#xff1a; van-popup背景颜色渐变 使用深度修改样式不生效&#xff0c;直接在 custom-style里面修改即可&#xff1b; <van-popup position"bottom"custom-style"height:25%;background:linear-gradient(95deg, #F8FCFF -0.03%, #EDF5FF 64.44…

JIRA 在 2024 年完全停止服务器版本支持

在服务器上的开源许可证版本已经要过期了&#xff0c;想去更新下。 发现&#xff0c;JIRA 的所有服务器版本的支持马上就要结束了。 这就意味着&#xff0c;如果你部署的服务器版本的 JIRA 的话&#xff0c;你将没有办法对服务器进行更新。 貌似&#xff0c;必须使用 JIRA 提供…