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.mfbz.cn/a/599545.html

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

相关文章

ATA-2161高压放大器用途有哪些种类

高压放大器是一种电子设备&#xff0c;其主要功能是将输入信号放大到较高的电压水平&#xff0c;同时保持信号的形状和特性。这种设备在各种应用领域中都有重要作用&#xff0c;它的种类繁多&#xff0c;根据不同的用途可以分为多种类型。 1.医学领域 在医学设备中&#xff0c;…

搭建Harbor仓库

文章目录 Harbor仓库搭建Harbor仓库安装 docker 服务修改配置文件 Harbor仓库 搭建Harbor仓库 下载 Harbor 仓库 安装 docker 服务 # step 1: 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 yum-config-m…

notepad++安装 hex-editor插件

打开notepad 点击插件 搜索 hex-editor,点击右侧 安装install 安装成功后&#xff0c;在已安装插件中就有显示了

Java性能优化(五)-多线程调优-Lock同步锁的优化

作者主页&#xff1a; &#x1f517;进朱者赤的博客 精选专栏&#xff1a;&#x1f517;经典算法 作者简介&#xff1a;阿里非典型程序员一枚 &#xff0c;记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法&#xff08;公众号同名&#xff09; ❤️觉得文章还…

《QT实用小工具·五十九》随机图形验证码,带有一些可人的交互与动画

1、概述 源码放在文章末尾 该项目实现了可交互的动画验证码控件&#xff0c;趣味性十足&#xff1a; 字符变换动画 噪音动画 可拖动交互 项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef CAPTCHAMOVABLELABEL_H #define CAPTCHAMOVABLELABEL…

【影片欣赏】【指环王】【魔戒:护戒使者 The Lord of the Rings: The Fellowship of the Ring】

2001年发行&#xff0c;Extended DVD Edition Part One 1. Prologue: One Ring to Rule Them All… 2. Concerning Hobbits 3. The Shire 4. Very Old Friends 5. A Long-expected Party 6. Farewell Dear Bilbo 7. Keep It Secret, Keep It Safe 8. The Account of Isildur 9…

MyBatis入门例子

1、建立与数据库对应的POJO类 2、建立mybatis的配置文件 修改后如下&#xff1a; 3、创建POJO对象和Mysql数据的表之间的映射配置 4、建一个测试方法 实现从数据库中取数一条数据&#xff0c;封装成User对象返回 注意点&#xff1a; 这点&#xff0c;大家应该不陌生了&#x…

28-代码随想录18四数之和

18. 四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff…

小米手机miui14 android chrome如何取消网页自动打开app

搜索媒体打开应用 选择你要阻止打开的app&#xff0c;以github为例 取消勾选打开支持的链接。 参考&#xff1a;https://www.reddit.com/r/chrome/s/JBsGkZDkRZ

【进程终止】退出信号 | 三种退出情况 | 如何进程终止returnexit_exit

目录 退出码 退出信号 进程终止情况3 如何进程终止 return退出 库函数exit 系统调用函数_exit ​exit和_exit的区别缓冲区 exit _exit 退出码 回顾上篇 代码跑完&#xff0c;结果正确&#xff08;退出码为0&#xff09;代码跑完&#xff0c;结果不正确&#xff08;退…

批量将GOID转成GO term名并添加BP,MF,CC分类信息

基因本体论&#xff08;Gene Ontology&#xff0c;GO&#xff0c;https://www.geneontology.org&#xff09;是一个广泛应用于生物信息学领域的知识库&#xff0c;它提供了一套标准化的词汇和分类体系&#xff0c;用于描述基因功能、细胞组分和生物过程。GO旨在统一科研人员对基…

C/C++ BM30 二叉搜索树与双向链表

文章目录 前言题目解决方案一1.1 思路阐述1.2 源码 解决方案二2.1 思路阐述2.2 源码 总结 前言 这道题要明白二叉搜索树的概念&#xff0c;同时还要对链表的知识比较熟悉。 题目 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范…

在QEMU上运行OpenSBI+Linux+Rootfs

在QEMU上运行OpenSBILinuxRootfs 1 编译QEMU2 安装交叉编译工具3 编译OpenSBI4 编译Linux5 创建根文件系统5.1 编译busybox5.2 创建目录结构5.3 制作文件系统镜像5.3.1 创建 ext2 文件5.3.2 将目录结构拷贝进 ext2 文件5.3.3 取消挂载 6 运行OpenSBILinuxRootfs 本文所使用的版…

PVZ2 植物克僵尸【第二期】

众所周知&#xff0c;PVZ2&#xff08;植物大战僵尸2&#xff09;中有许多恶心的僵尸&#xff0c;而我们不得不派出它们的————克星&#xff01;&#xff08;*为建议方法&#xff09; 5.战机小鬼 战机小鬼&#xff0c;恶心会发射子弹&#xff0c;所以&#xff1a; 1&…

(三)JSP教程——JSP动作标签

JSP动作标签 用户可以使用JSP动作标签向当前输出流输出数据&#xff0c;进行页面定向&#xff0c;也可以通过动作标签使用、修改和创建对象。 <jsp:include>标签 <jsp:include>标签将同一个Web应用中静态或动态资源包含到当前页面中。资源可以是HTML、JSP页面和文…

【解决】:git clone项目报错fatal: fetch-pack: invalid index-pack output

象&#xff1a;之前一直使用gitee将个人学习和工作相关记录上传到个人gitee仓库&#xff0c;一直没出现过问题。直到有一天换电脑重新拉取代码发现出了问题&#xff0c;具体如下图&#xff1a; 原因分析&#xff1a; 经过查询发现主要原因是因为git clone的远程仓库的项目过大…

【强化学习】公平性Actor-Critic算法

Bringing Fairness to Actor-Critic Reinforcement Learning for Network Utility Optimization 阅读笔记 Problem FormulationLearning AlgorithmLearning with Multiplicative-Adjusted RewardsSolving Fairness Utility Optimization Evaluations 在网络优化问题中&#xff…

懒人网址导航源码v3.9源码及教程

懒人网址导航源码v3.9源码及教程 效果图使用方法部分源码领取源码下期更新预报 效果图 使用方法 测试环境 宝塔Nginx -Tengine2.2.3的PHP5.6 MySQL5.6.44为防止调试错误&#xff0c;建议使用测试环境运行的php与mysql版本首先用phpMyAdmin导入数据库文件db/db.sql 如果导入不…

QT-TCP通信

网上的资料太过于书面化&#xff0c;所以看起来有的让人云里雾里&#xff0c;看不懂C-tcpsockt和S-tcpsocket的关系 所以我稍微画了一下草图帮助大家理解两个套接字之间的关系。字迹有的飘逸勉强看看 下面是代码 服务端&#xff1a; MainWindow::MainWindow(QWidget *parent) …

Kubernetes 教程:在 Containerd 容器中使用 GPU

原文链接:Kubernetes 教程:在 Containerd 容器中使用 GPU 云原生实验室本文介绍了如何在使用 Containerd 作为运行时的 Kubernetes 集群中使用 GPU 资源。https://fuckcloudnative.io/posts/add-nvidia-gpu-support-to-k8s-with-containerd/ 前两天闹得沸沸扬扬的事件不知道…
最新文章