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;这包括文本、图片、音频、视频等。 不得违反网站的使用条…

【华为机考模拟题】Words、Vowel、计算字符串重新排列数

目录 一、Words 二、Vowel 三、计算字符串重新排列数 一、Words 每个句子由多个单词组成&#xff0c;句子中的每个单词的长度都可能不一样&#xff0c;假设每个单词的长度 Ni 为该单词的重量&#xff0c;你需要做的就是给出整个句子的平均重量 V。 输入&#xff1a; Who L…

如何设置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实战】训练一个…

store内路由跳转router.push

选择action还是mutation 选择action mutation 是用来改变state的&#xff0c;不应该包含路由相关操作mutation是同步执行的&#xff0c;不应该包含异步操作&#xff0c;而路由是异步操作 action中进行路由跳转 因为vuex中没有this&#xff0c;所以不能用this.$router&#…

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;以…

实名认证的接口方式、PHP身份证实名认证接口集成

身份证实名认证接口用于验证用户提交身份信息的真实性和有效性&#xff0c;开发者可以下载开发者示例快速的将身份证实名认证接口功能集成到自己的应用中&#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、…

数据结构-自定义栈、队列、二分查找树、双向链表

/*** 底层是数组*/ public class MyStack {private long [] arr; // 底层是数组private int top -1; // 核心【栈顶的索引&#xff08;指针&#xff09;】public MyStack() {super();arr new long[10];}public MyStack(int capacity) {super();arr new long[capacity]; // 自…

leetcode刷题:884、977

884.比较含退格的字符串 给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。 注意&#xff1a;如果对空文本输入退格字符&#xff0c;文本继续为空。 方法一、用栈 #include <i…

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…

Linux服务器上网络端口测试

在使用telnet 111.22.345.66 80在Linux主机上尝试连接目标IP地址111.22.345.66的80端口时&#xff0c;会看到以下四行返回信息的含义解释&#xff1a; Trying 111.22.345.66...&#xff1a; 这一行指示telnet正在尝试与IP地址为111.22.345.66的主机建立连接。这表明telnet正尝…

elasticsearch安装配置注意事项

安装Elasticsearch时&#xff0c;需要注意以下几个重要事项&#xff1a; 1、版本选择&#xff1a;选择与你系统和其他组件&#xff08;如Logstash、Kibana&#xff09;兼容的Elasticsearch版本。 2、Java环境&#xff1a;Elasticsearch是基于Java构建的&#xff0c;因此确保已…

书生·浦语大模型实战营之 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…