【从入门到起飞】JavaSE—方法引用

news2024/11/20 11:52:11

🎊专栏【JavaSE】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【The truth that you leave】
🥰欢迎并且感谢大家指出我的问题

文章目录

  • 🍔概述
  • 🍔注意
    • 🎈如何确定是否是函数式接口
  • 🍔示例
  • 🎄方法引用的分类
    • 🏳️‍🌈引用静态方法
    • 🏳️‍🌈引用成员方法
      • 🛸注意
    • 🏳️‍🌈引用构造方法
      • 🛸方法引用的规则:
    • 🏳️‍🌈使用类名引用成员方法
      • 🛸方法引用的规则:
      • 🛸抽象方法形参的详解:
      • 🛸局限性:
    • 🏳️‍🌈引用数组的构造方法
      • 🛸注意
  • 🍔总结
  • 🍔彩蛋

在这里插入图片描述

🍔概述

把已经有的方法拿过来用,作为函数式接口中抽象方法的方法体
使用::来引用

🍔注意

1.引用处需要是函数式接口
2.被引用的方法需要已经存在
3.被引用方法的形参和返回值需要跟抽象方法的形参和返回值保持一致
4.被引用方法的功能需要满足当前的要求

🎈如何确定是否是函数式接口

查看的是new后面的东西是否是函数式接口
在这里插入图片描述
在这里插入图片描述

🍔示例

对一个数组,进行倒序排序

在这里插入图片描述
方法引用
在这里插入图片描述

🎄方法引用的分类

🏳️‍🌈引用静态方法

格式:类名 :: 静态方法
例如:Integer::parseInt

在这里插入图片描述

🏳️‍🌈引用成员方法

格式:对象 :: 成员方法
例如
其他类:其他类对象 :: 方法名
本类:this :: 方法名
父类:super :: 方法名

在这里插入图片描述

🛸注意

静态方法是没有this的
所以下图会报错
在这里插入图片描述

🏳️‍🌈引用构造方法

格式:类名 :: new
例子:Student :: new

🛸方法引用的规则:

1.需要有函数式接口
2.被引用的方法必须已经存在
3.被引用方法的形参和返回值,需要跟抽象方法的形参返回值保持一致
4.被引用方法的功能需要满足当前的需求

Student.java

package com.itheima.a01myfunction;

public class Student {
    private String name;
    private int age;


    public Student() {
    }


    public Student(String str) {
        String[] arr = str.split(",");
        this.name = arr[0];
        this.age = Integer.parseInt(arr[1]);
    }


    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

FunctionDemo4.java

package com.itheima.a01myfunction;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class FunctionDemo4 {
    public static void main(String[] args) {
        /*
        方法引用(引用构造方法)
        格式
                类名::new

        目的:
                创建这个类的对象

        需求:
             集合里面存储姓名和年龄,要求封装成Student对象并收集到List集合中

        方法引用的规则:
            1.需要有函数式接口
            2.被引用的方法必须已经存在
            3.被引用方法的形参和返回值,需要跟抽象方法的形参返回值保持一致
            4.被引用方法的功能需要满足当前的需求
       */

        //1.创建集合对象
        ArrayList<String> list = new ArrayList<>();
        //2.添加数据
        Collections.addAll(list, "张无忌,15", "周芷若,14", "赵敏,13", "张强,20", "张三丰,100", "张翠山,40", "张良,35", "王二麻子,37", "谢广坤,41");
        //3.封装成Student对象并收集到List集合中
        //String --> Student
      /*  List<Student> newList = list.stream().map(new Function<String, Student>() {
            @Override
            public Student apply(String s) {
                String[] arr = s.split(",");
                String name = arr[0];
                int age = Integer.parseInt(arr[1]);
                return new Student(name, age);
            }
        }).collect(Collectors.toList());
        System.out.println(newList);*/


        List<Student> newList2 = list.stream().map(Student::new).collect(Collectors.toList());
        System.out.println(newList2);

    }
}

🏳️‍🌈使用类名引用成员方法

格式:类名 :: 成员方法
例子:String :: substring

🛸方法引用的规则:

1.需要有函数式接口
2.被引用的方法必须已经存在
3.被引用方法的形参,需要跟抽象方法的第二个形参到最后一个形参保持一致,返回值需要保持一致。
4.被引用方法的功能需要满足当前的需求

🛸抽象方法形参的详解:

第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法
在Stream流当中,第一个参数一般都表示流里面的每一个数据。
假设流里面的数据是字符串,那么使用这种方式进行方法引用,只能引用String这个类中的方法

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

🛸局限性:

不能引用所有类中的成员方法。
是跟抽象方法的第一个参数有关,这个参数是什么类型的,那么就只能引用这个类中的方法。
在这里插入图片描述

🏳️‍🌈引用数组的构造方法

格式:数据类型[ ] :: new
例子:int[ ] :: new

🛸注意

数组的类型,需要跟流中数据的类型保持一致。
在这里插入图片描述

🍔总结

在这里插入图片描述
在这里插入图片描述

🍔彩蛋

在这里插入图片描述

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

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

相关文章

电脑msvcr100.dll丢失的解决方法,找不到msvcr100.dll的修复方法分享

msvcr100.dll 丢失是一种常见的软件运行错误&#xff0c;通常会在运行某些程序时出现。这个问题可能是由于多种原因导致的&#xff0c;例如病毒感染、软件损坏、卸载应用程序时误删除文件等。为了解决这个问题&#xff0c;我们需要采取一些措施来恢复 msvcr100.dll 文件。 一、…

heic图片如何转为jpg格式

heic图片如何转为jpg格式&#xff1f;现阶段&#xff0c;在技术水平不断完善的基础上&#xff0c;图片质量越来越好了&#xff0c;且图片数量也越来越多。图片内容不断丰富&#xff0c;导致图片格式愈发多样化。为了能够保证图片的有效应用&#xff0c;我们有的时候需要将图片格…

一台PoE交换机可以为多少个设备提供供电?

如今在安防监控领域&#xff0c;许多网络设备都支持PoE供电。在网络监控工程中&#xff0c;为了节省布线成本并提高便捷性&#xff0c;大多数工程商选择使用PoE供电方案&#xff0c;也就是使用PoE交换机为监控摄像头提供电力。那么&#xff0c;一台功率输出以太网&#xff08;P…

可以创业,也可以副业的网上长期挣钱的项目

在这个飞速发展的互联网时代&#xff0c;越来越多的人开始尝试在网上创业或者寻找一份可持续的副业来增加收入。不过在网上赚钱的难度是比较大的&#xff0c;不是轻易就能做到的&#xff0c;所以不付出一番努力&#xff0c;没有悟性和执行力&#xff0c;那么是很难做好的&#…

MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储

Windows系统实现多磁盘存储 1.为什么2.多磁盘存储2.1 数据库配置2.2 文件夹磁盘映射2.3 创建新的数据集 3.总结 1.为什么 这里仅针对只有一台Windows系统服务器的情景&#xff1a; 当服务器存储不足时&#xff0c;或者要接入更多的数据&#xff0c;就会挂载新磁盘&#xff0c…

Vim编辑器使用入门

目录 一、Vim 编辑器基础操作 二、Vim 编辑器进阶操作 三、Vim 编辑器高级操作 四、Vim 编辑器文件操作 五、Vim 编辑器文件管理 六、Vim 编辑器进阶技巧 七、Vim 编辑器增强功能 Vim的三种工作模式 一、Vim 编辑器基础操作 1.移动光标 - 光标的移动控制 移动光标有两…

JS手动实现发布者-订阅者模式

发布-订阅模式是一种对象间一对多的依赖关系&#xff0c;当一个对象的状态发送改变时&#xff0c;所有依赖于它的对象都将得到状态改变的通知。具体过程是&#xff1a;订阅者把自己想订阅的事件注册到调度中心&#xff0c;当发布者更新该事件时通知调度中心&#xff0c;由调度中…

python每日一题(模拟用户登录验证)

1、题目 预先设定正确用户名与密码&#xff0c;用来验证用户是否登录成功。 第一次&#xff1a; ① 输入用户名与密码&#xff0c;如果用户名与密码正确&#xff0c;则提示登录成功&#xff1b; ② 如果用户名错误&#xff08;不管密码是否正确&#xff09;&#xff0c;则需要重…

【NetEQ】读 《白话解读 WebRTC 音频 NetEQ 及优化实践》学习笔记

白话解读 WebRTC 音频 NetEQ 及优化实践webrtc 的重要模块 官方文档 :转载请标明出处:大神翻译 大神地址 : https://blog.csdn.net/lhl_blog/article/details/10993605GIPS NetEQ概述 GIPS NetEQ是一项专为IP电信系统开发的高级语音质量处理技术,其能够在大幅提高语音质量的…

ros 接收相机数据数据并发布

完整这个任务不需要用到python3 效果如下所示 环境 ROS1 python2.7 原始环境 无conda 或者conda deactivate 无conda 状态 pip install rospkg pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python4.2.0.3 代码 放在工程目录中 #!/usr/bin/env …

stm32学习笔记:OLED显示屏

一、OLED简介 OLED:有机发光二极管&#xff0c;供电∶3~5.5V&#xff0c;通信协议︰I2C/SPI&#xff0c;分辨率∶12864 二、常用的调试方式 串口调试∶通过串口通信&#xff0c;将调试信息发送到电脑端&#xff0c;电脑使用串口助手显示调试信息 显示屏调试∶直接将显示屏连接…

龙讯旷腾机器学习力场PWMLFF V0.1.0——优化件lammps接口,提供主动学习方案

PWMLFF&#xff08;机器学习力场&#xff09;手册 http://doc.lonxun.com/PWMLFF/ 我们都知道从第一性原理出发的分子动力学&#xff08;Ab Initio Molecular Dynamics, AIMD&#xff09;计算非常精确&#xff0c;但需要消耗大量时间和计算资源&#xff0c;能模拟的空间尺度和…

代码随想录算法训练营第59天 | ● 503.下一个更大元素II ● 42. 接雨水

文章目录 前言一、503.下一个更大元素II二、42. 接雨水总结 前言 单调栈&#xff1b; 一、503.下一个更大元素II 循环的问题&#xff1a;1.多建立一个数组 2.采用取模的方法&#xff1b; 问题&#xff1a;采用取模&#xff0c;后面的值会被前面的覆盖掉吗&#xff1f; 答&am…

宁波融资融券开户利息率最低是多少?两融利率5%或以下!

宁波融资融券开户利息率最低是多少?两融利率5%或以下&#xff01; 融资融券是指投资者通过借入资金融资&#xff0c;或者借入证券卖出并借入资金购买证券&#xff0c;以达到增加投资收益的一种交易方式。融资融券交易需要满足一定的条件&#xff0c;如投资者必须拥有一定的股…

Go 围炉札记

文章目录 一、Go 安装 一、Go 安装 VScode下配置Go语言开发环境【2023最新】 基础篇&#xff1a;新手使用vs code新建go项目 vscode里安装Go插件和配置Go环境 Documentation Golang 配置代理 Go命令详解 一文详解Go语言常用命令 Go 语言教程 熬夜整理&#xff0c;最全的Go语…

阿里云效自动构建python自动测试脚本

之前一直用的是jenkins自动构建自动化脚本&#xff0c;因为现在的公司统一在阿里云效的流水线上做代码的管理&#xff0c;构建&#xff0c;要求自动化测试也在上面自动构建&#xff0c;故而学习了一下。为自己做一个记录&#xff0c;也给有需要的朋友做一个参考。 1. 新建流水…

大厂面试-16道面试题

1 java集合类有哪些&#xff1f; List是有序的Collection&#xff0c;使用此接口能够精确的控制每个元素的插入位置&#xff0c;用户能根据索引访问List中元素。常用的实现List的类有LinkedList&#xff0c;ArrayList&#xff0c;Vector&#xff0c;Stack。 ArrayList是容量…

python 为 网易云下载的 本地音乐文件增加 序号

前言 网易云下载的音乐文件&#xff0c;信息挺全的&#xff0c;但是缺少序号&#xff0c;用本地播放器听是乱序的&#xff0c;就很头疼。 遂写一个python脚本解决问题 本python会把基于音乐文件的元信息&#xff0c;重命名文件 到 以下格式 序号 标题.后缀 额外依赖库 muta…

工时表软件如何彻底改变时间跟踪工作?

在工作场所&#xff0c;生产率的下降一直在消耗我们的精力和钱包。你知道吗&#xff0c;每年仅生产力倦怠一项&#xff0c;每位员工就会给企业造成 1,967 美元的惊人损失&#xff01; 好消息是&#xff0c;有一种创新的解决方案可以解决这种生产力下降的问题&#xff0c;它就是…

远程控制桌面软件是否支持远程防护墙配置

远程控制桌面软件是一种便捷的工具&#xff0c;它能够帮助用户在远程访问和操作计算机桌面。然而&#xff0c;远程控制软件是否支持远程防火墙配置这个问题的答案并不是简单的是或否。下面将从软件设计的角度和实际使用情况的角度来解释这个问题。 首先&#xff0c;让我们了解一…