Java_方法引用

        方法引用就是把已经有的方法拿过来用,当作函数式接口中抽象方法的方法体。

条件:

        1.引用处需要是函数式接口

        2.被引用的方法需要已经存在

        3.被引用的方法的形参和返回值需要跟抽象方法的形参和返回值保持一致

        4.被引用方法的功能需要满足当前的要求

简单代码演示:

        注意:方法引用也算引用,初始数组应使用引用数据类型Integer

public class FunctionDemo1 {public static void main(String[] args) {//创建数组Integer[] arr = {5,2,6,3,4,1};//按倒序排序Arrays.sort(arr, FunctionDemo1::subtraction);//输出数组System.out.println(Arrays.toString(arr));}public static int subtraction(int num1, int num2) {return num2 - num1;}
}
运行结果:

详细方法引用:

1.引用静态方法

代码演示
public class FunctionDemo2 {public static void main(String[] args) {/*集合中有以下字符串"1","2","3","4","5"引用静态方法,把他们都变成int类型*///创建集合并添加元素ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"1","2","3","4","5");//引用静态方法list.stream().map(Integer::parseInt).forEach(s -> System.out.println(s + 1));}
}
运行结果:

2.引用成员方法

        1)引用其他类成员方法       

        格式:其他类对象::方法名

        代码演示:
        成员方法类:
public class StringOperation {public boolean StringOperation(String str) {return str.startsWith("张") && str.length() == 3;}
}
        测试类:
public class FunctionDemo3 {public static void main(String[] args) {//要求:将集合中姓张并且名字为3个字的人名提取出来//创建集合ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "张大","张小小","张老老","王一","王一一");//引用其他类成员方法过滤list.stream().filter(new StringOperation()::StringOperation).forEach(s -> System.out.println(s));}
}
        运行结果:

        

        2)引用本类成员方法        

        格式:this::方法名

        3)引用父类成员方法        

        格式:super::方法名

        其他两种方法和第一种同理,在次不做演示,但是需要注意:不能在静态方法中引用本类成员方法或者父类成员方法,因为static修饰的方法中,没有this和super。

3.引用构造方法

        格式:类名::new

代码演示:
public class FunctionDemo4 {public static void main(String[] args) {//将集合中的元素转换成Student类型//创建集合ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "张大,20","张小小,21","张老老,22","王一,23","王一一,24");list.stream().map(Student::new).forEach(s -> System.out.println(s));}
}
运行结果:

4.其他调用方式

        1)使用类名引用成员方法
        格式:

                类名::成员方法

        规则:

                1.需要有函数式接口

                2.被引用的方法必须已经存在

                3.被引用方法的形参,需要跟抽象方法的第二个形参到最后一个形参保持一致,返回值需要保持一致

                4.被引用方法的功能需要满足当前的需求

        抽象方法形参的详解:

        第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法,在Stream流中,第一个参数一般都表示流里面的每一个数据。

        第二个参数到最后一个参数:跟被引用方法的形参保持一致,如果没有第二个参数,说明被引用的方法需要是无参的成员方法。

        局限性:

        不能引用所有类中的成员方法,是跟抽象方法的第一个参数有关,这个参数是什么类型的,那么就只能引用这个类中的方法

        代码演示:
public class FunctionDemo5 {public static void main(String[] args) {//集合里面添加一些字符串,要求变成大写后输出//创建集合ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "abC","ABC","abc","ABc","Abc");list.stream().map(String::toUpperCase).forEach(s -> System.out.println(s));}
}
        运行结果:

        

        2)引用数组的构造方法
        格式:

                数据类型[ ]::new

        规则:

                数组类型需要跟流中数据的类型保持一致

        代码演示:
public class FunctionDemo6 {public static void main(String[] args) {//要求:集合中存储一些整数,收集到数组当中//创建集合ArrayList<Integer> list = new ArrayList<>();Collections.addAll(list, 1,2,3,4,5);//收集到数组中Integer[] arr = list.stream().toArray(Integer[]::new);System.out.println(Arrays.toString(arr));}
}
运行结果:

综合练习

练习一:
集合中存储一些字符串数据,比如:"张三,23"
收集到Student类型的数组当中(使用方法引用完成)
代码演示:
public class FunctionTest1 {public static void main(String[] args) {/*集合中存储一些字符串数据,比如:"张三,23"收集到Student类型的数组当中(使用方法引用完成)*///创建集合并添加元素ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"han,21","ma,22","zhao,23");Student[] arr = list.stream().map(Student::new).toArray(Student[]::new);System.out.println(Arrays.toString(arr));}
}
运行结果:

练习二:
创建集合添加学生对象,学生对象属性:name,age
只获取姓名放到数组当中(使用方法引用完成)
代码演示:
public class FunctionTest2 {public static void main(String[] args) {/*创建集合添加学生对象,学生对象属性:name,age只获取姓名放到数组当中(使用方法引用完成)*///创建集合并添加元素ArrayList<Student> list = new ArrayList<>();list.add(new Student("han",21));list.add(new Student("ma",22));list.add(new Student("zhao",23));//只获取姓名放到数组当中String[] arr = list.stream().map(Student::getName).toArray(String[]::new);System.out.println(Arrays.toString(arr));}
}
运行结果:

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

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

相关文章

搭建父模块和工具子模块

第一章 项目父模块搭建 1.1 nancal-idsa 作为所有工程的父工程&#xff0c;用于管理项目的所有依赖版本。 1.2 指定 pom 类型模块&#xff0c;删除 src 目录&#xff0c;点击Reload project 1.3 添加依赖 pom.xml <parent> <groupId>org.springframework.…

Python爬虫教程:入门爬取网页数据

1.遵守法律法规 爬虫在获取网页数据时&#xff0c;需要遵守以下几点&#xff0c;以确保不违反法律法规&#xff1a; 不得侵犯网站的知识产权&#xff1a;爬虫不得未经授权&#xff0c;获取和复制网站的内容&#xff0c;这包括文本、图片、音频、视频等。 不得违反网站的使用条…

如何设置ddns动态域名服务实现外网访问

在本地搭建好服务器&#xff0c;部署好web网站或其他应用后&#xff0c;需要在外网访问内网时&#xff0c;如何设置动态域名服务ddns&#xff0c;将主机的内网IP端口映射到外网访问&#xff0c;是我们需要面对的一个重要步骤。 内网发布外网&#xff0c;常见的有两种方案&…

【智能优化算法】金枪鱼群优化(Tuna Swarm Optimization,TSO)

金枪鱼群优化&#xff08;Tuna Swarm Optimization,TSO&#xff09;是期刊“Computational Intelligence and Neuroscience”&#xff08;IF&#xff1a;1.8&#xff09;的2021年智能优化算法 01.引言 金枪鱼群优化&#xff08;Tuna Swarm Optimization,TSO&#xff09;的主要…

【Diffusion实战】训练一个类别引导diffusion模型(Pytorch代码详解)

又学习了一种方法&#xff0c;类别引导diffusion模型&#xff0c;使用mnist数据集&#xff0c;记录一下它的用法吧。 Diffusion实战篇&#xff1a;   【Diffusion实战】训练一个diffusion模型生成S曲线&#xff08;Pytorch代码详解&#xff09;   【Diffusion实战】训练一个…

Rust Course学习(编写测试)

如果友友你的计算机上没有安装Rust&#xff0c;可以直接安装&#xff1a;Rust 程序设计语言 (rust-lang.org)https://www.rust-lang.org/zh-CN/ Introduce 介绍 Testing in Rust involves writing code specifically designed to verify that other code works as expected. It…

2024.5.7

槽函数声明 private slots:void on_ed_textChanged();void on_pushButton_clicked(); }; 槽函数定义 void Widget::on_ed_textChanged()//文本框 {if(ui->ed1->text().length()>5&&ui->ed2->text().length()>5){ui->pushButton->setStyleSh…

Xinstall广告效果监测,助力广告主优化投放策略

在移动互联网时代&#xff0c;APP推广已成为企业营销的重要手段。然而&#xff0c;如何衡量推广效果&#xff0c;了解用户来源&#xff0c;优化投放策略&#xff0c;一直是广告主和开发者面临的难题。这时&#xff0c;Xinstall作为国内专业的App全渠道统计服务商&#xff0c;以…

Docker 安装部署 postgres

Docker 安装部署 postgres 1、拉取 postgres 镜像文件 [rootiZbp19a67kznq0h0rgosuxZ ~]# docker pull postgres:latest latest: Pulling from library/postgres b0a0cf830b12: Pull complete dda3d8fbd5ed: Pull complete 283a477db7bb: Pull complete 91d2729fa4d5: Pul…

RT-DETR-20240507周更说明|更新Inner-IoU、Focal-IoU、Focaler-IoU等数十种IoU计算方式

RT-DETR改进专栏|包含主干、模块、注意力、损失函数等改进 专栏介绍 本专栏包含模块、卷积、检测头、损失等深度学习前沿改进,目前已有改进点70&#xff01;每周更新。 20240507更新说明&#xff1a; ⭐⭐ 更新CIoU、DIoU、MDPIoU、GIoU、EIoU、SIoU、ShapeIou、PowerfulIoU、…

8.MyBatis 操作数据库(进阶)

文章目录 1.动态SQL插入1.1使用注解方式插入数据1.2使用xml方式插入数据1.3何时用注解何时用xml&#xff1f;1.4使用SQL查询中有多个and时&#xff0c;如何自动去除多余and1.4.1方法一&#xff1a;删除and之后的代码如图所示&#xff0c;再次运行1.4.2方法二&#xff1a;加上tr…

书生·浦语大模型实战营之 OpenCompass大模型评测

书生浦语大模型实战营之 OpenCompass &#xff1a;是骡子是马&#xff0c;拉出来溜溜 为什么要研究大模型的评测&#xff1f; 百家争鸣&#xff0c;百花齐放。 首先&#xff0c;研究评测对于我们全面了解大型语言模型的优势和限制至关重要。尽管许多研究表明大型语言模型在多…

Linux cmake 初窥【2】

1.开发背景 基于上一篇的基础上&#xff0c;再次升级 2.开发需求 基于 cmake 指定源文件目录可以是多个文件夹&#xff0c;多层目录 3.开发环境 ubuntu 20.04 cmake-3.23.1 4.实现步骤 4.1 准备源码文件 工程目录如下 顶层脚本 compile.sh 负责执行 cmake 操作&#xff0…

FSC森林认证是什么?

FSC森林认证&#xff0c;又称木材认证&#xff0c;是一种运用市场机制来促进森林可持续经营&#xff0c;实现生态、社会和经济目标的工具。FSC森林认证包括森林经营认证&#xff08;Forest Management, FM&#xff09;和产销监管链认证&#xff08;Chain of Custody, COC&#…

微搭低代码入门06分页查询

目录 1 创建自定义代码2 编写分页代码3 创建页面4 创建变量5 配置数据列表总结 我们在数据模型章节介绍了微搭后端服务编写的三种方式&#xff0c;包括Http请求、自定义代码、云函数。本篇我们详细讲解一下利用自定义代码开发分页查询的功能。 1 创建自定义代码 打开控制台&am…

Qt——入门基础

目录 Qt入门第一个应用程序 main.cpp widget.h widget.cpp widget.ui .pro Hello World程序 对象树 编辑框 按钮 Qt 窗口坐标系 Qt入门第一个应用程序 main.cpp 这就像一开始学语言时都会打印一个“Hello World”一样&#xff0c;我们先来看看创建好一个项目后&…

LeetCode 难题解析 —— 正则表达式匹配 (动态规划)

10. 正则表达式匹配 思路解析 这道题虽然看起来不难理解&#xff0c;但却存在多种可能&#xff0c;当然这种可能的数量是有限的&#xff0c;且其规律对于每一次判别都使用&#xff0c;所以自然而然就想到用 动态规划 的方法啦 接下来逐步分析可能的情况&#xff1a; &#x…

栈(使用顺序表构建)

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 目录 1、栈的概念2、栈的数组构建方法2.1 前言2.2 正文2.2.1 栈的初始化2.2.2 栈的销毁2.2.3 压…

栈与队列(包括例题一道)

栈 栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO &#xff08; Last In First Out &#xff09;的原则。 压栈&…

AI去衣技术在动画制作中的应用

随着科技的发展&#xff0c;人工智能&#xff08;AI&#xff09;已经在各个领域中发挥了重要作用&#xff0c;其中包括动画制作。在动画制作中&#xff0c;AI去衣技术是一个重要的工具&#xff0c;它可以帮助动画师们更加高效地完成工作。 AI去衣技术是一种基于人工智能的图像…