方法引用(Java)

news2024/9/20 22:54:19

把已经有的方法拿过来用,当做函数式接口中抽象方法的方法体

1.引用处必须是函数式接口

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

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

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

package function;

import java.util.Arrays;

public class FunctionDemo {
    public static void main(String[] args) {
        Integer[] arr = {2, 6, 7, 1, 5, 9, 8};
        Arrays.sort(arr,FunctionDemo::subtraction);
        System.out.println(Arrays.toString(arr));
    }

    public static int subtraction(int num1, int num2) {
        return num2 - num1;
    }
}

方法引用的分类

1.引用静态方法

package function;

import java.util.ArrayList;
import java.util.Collections;


public class FunctionDemo2 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"1","2","3","4","5");
        list.stream().map(Integer::parseInt).forEach(s-> System.out.print(s+" "));
    }
}

2.引用成员方法

①引用其他类的chengyuanfangfa

package function;

import java.util.ArrayList;
import java.util.Collections;

public class FunctionDemo3 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张三丰","张无忌","张三","张强","韦小宝");
        list.stream().filter(new StringOperation()::stringJudge).forEach(s-> System.out.println(s));
    }
}
package function;

public class StringOperation {
    public boolean stringJudge(String s) {
        return s.startsWith("张") && s.length() == 3;
    }
}

②引用本类的成员方法

静态方法中是没有this的所以只能调用本类的方法

package function;

import java.util.ArrayList;
import java.util.Collections;

public class FunctionDemo3 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张三丰","张无忌","张三","张强","韦小宝");
//        list.stream().filter(new StringOperation()::stringJudge).forEach(s-> System.out.println(s));
        list.stream().filter(new FunctionDemo3()::stringJudge).forEach(s-> System.out.println(s));
    }
    public boolean stringJudge(String s) {
        return s.startsWith("张") && s.length() == 3;
    }
}

③引用父类的成员方法

3引用构造方法

package function;

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) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "张三丰,24", "张无忌,26", "张三,18", "张强,31", "韦小宝,27");
//        list.stream().filter(new StringOperation()::stringJudge).forEach(s-> System.out.println(s));
        List<Student> collect = list.stream().map(Student::new).collect(Collectors.toList());
        System.out.println(collect);
    }
}
package function;

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

    public Student() {
    }

    public Student(String str) {
        String[] split = str.split(",");
        this.name = split[0];
        this.age = Integer.parseInt(split[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 + "}";
    }
}

方法引用的规则:

1.需要有函数式接口

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

抽象方法形参的详解:

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

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

引用数组的构造方法

数据类型[]::new

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

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

相关文章

网络高级项目( 基于webserver的工业数据采集和控制项目)

目录 一、项目要求&#xff1a; 二、演示效果&#xff1a; 设备端&#xff1a; Modbus用户控制端&#xff1a; 服务器端&#xff1a; 网页端&#xff1a; 三、 项目代码&#xff1a; Modbus用户控制端代码&#xff1a; 服务器端代码&#xff1a; 网页端代码&#xff1…

C++3D迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> using namespace std; void printmaze(char strmaze[5][5][5]) {cout << "-----" << endl;int i 0;int ia 0…

pdf去水印怎么去掉免费?6个pdf去除水印的方法快码住,超级好用!

pdf去水印怎么去掉免费&#xff1f;您是否有一些带有水印的pdf文档&#xff0c;让您感觉到头疼&#xff1f;您又是否希望能够去除这些水印&#xff0c;或者想用其他水印来替换现有的水印&#xff1f;如果是这样的话&#xff0c;我非常推荐您继续阅读本篇文章。本文将为您提供一…

如何在Linux下升级R版本和RStudio

一、升级R版本 在Linux上&#xff0c;R的安装通常通过包管理器完成。不同的Linux发行版&#xff08;如Ubuntu、Debian、Fedora等&#xff09;可能略有不同。下面以Ubuntu为例&#xff0c;介绍如何升级R版本。如果你使用其他发行版&#xff0c;步骤可能类似。 二.更新步骤 2.…

Git:版本控制工具介绍

目录 全文概要版本控制工具介绍版本控制系统的概念**版本控制系统的历史****版本控制系统的分类****本地版本控制系统****集中式版本控制****分布式版本控制系统** Git 介绍Git 概念Git 与 SVN 对比**SVN的记录方式****Git 的记录快照** Git 安装Git 安装Bash、CMD与GUIGit 的配…

黑神话悟空黄凤岭

黑神话悟空黄风岭支线任务大全 第二关“黄风寨”的难度可以说是飙升&#xff1a; 虎先锋从名字来看只是一般妖王&#xff0c;但是他的天命人“猴头下酒”怕是吃到撑也吃不完&#xff0c;关底的黄风大圣二阶段放法宝之后的飓风更是重量级&#xff0c;从视线和移动能力对玩家会造…

Git提交类型

说明&#xff1a;Git提交类型指的是代码commit时&#xff0c;写在comment前面的标志&#xff0c;表示此次commit的提交类型&#xff0c;如下&#xff1a; Git提交类型 常见的Git提交类型有&#xff1a; feat&#xff1a;新特性、新功能或优化&#xff1b; fix&#xff1a;修复…

再临TSC原创24年CSP-J全真模拟卷-阅读程序篇(1)

没有看基础题的可以点击我的主页查看基础题部分 阅读程序题&#xff1a; 1. 16. 如果删除第6行&#xff0c;程序仍然能正确运行 A正确B错误 答案&#xff1a;B 17.输入负数时&#xff0c;程序什么也不会输出&#xff0c;并正常结束程序 A正确B错误 答案&#xff1a;A …

Linux内核(Kernel)启动过程分析

文章目录 Linux内核&#xff08;Kernel&#xff09;启动过程一、内核启动的基本流程1. 启动加载程序 (Bootloader)2. 内核解压阶段3. 内核启动&#xff08;Kernel Startup&#xff09;4. start_kernel函数5. 启动初始进程 二、内核文件加载及解压缩1.为什么是压缩文件2.文件类型…

磁盘写入缓存区太大,如何清理C盘缓存

针对“磁盘写入缓存区太大&#xff0c;如何清理C盘缓存”的问题&#xff0c;我们可以从多个角度进行专业解答。首先&#xff0c;需要明确的是&#xff0c;“磁盘写入缓存区太大”这一表述可能涉及硬盘缓存的设置或系统缓存管理&#xff0c;但通常用户面对的问题更多是关于C盘空…

变量常量标识符 Day5

1. 变量 1.1 变量的概念 变量是计算机内存中的一块存储单元&#xff0c;是存储数据的基本单元变量的组成包括&#xff1a;数据类型、变量名、值&#xff0c;后文会具体描述变量的本质作用就是去记录数据的&#xff0c;比如说记录一个人的身高、体重、年龄&#xff0c;就需要去…

Vue接入高德地图并实现基本的路线规划功能

目录 一、申请密钥 二、安装依赖 三、代码实现 四、运行截图 五、官方文档 一、申请密钥 登录高德开放平台&#xff0c;点击我的应用&#xff0c;先添加新应用&#xff0c;然后再添加Key。 如图所示填写对应的信息&#xff0c;系统就会自动生成。 二、安装依赖 npm i am…

Java调用数据库 笔记05

一. 数据库&#xff08;通过各种驱动来实现调用&#xff09;&#xff1a; &#xff08;应用程序通过接口控制的各种数据库驱动来调用数据库-->jdbc方法&#xff09; 1.创建Java的普通class类 2.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 3.驱动管理类…

中国空间计算产业链发展分析

2024中国空间计算产业链拆解 空间计算设备主要包括AR、VR、MR等终端设备。VR设备通常包括头戴式显示器&#xff08;VR头盔&#xff09;、手柄或追踪器等组件&#xff0c;用以完全封闭用户视野&#xff0c;营造虚拟环境体验。这些设备配备高分辨率显示屏、内置传感器和跟踪器。 …

电气自动化入门02:三相交流电及其主要应用参数

视频链接&#xff1a;1.2 电工知识&#xff1a;三相交流电及其主要应用参数_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW?p3&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.什么是交流电 交流电就是&#xff1a;大小和方向都随时间不断变化的电流 2…

OPPO大模型升级为AndesGPT-2.0 支持多模态等能力

OPPO公司宣布其人工智能大模型AndesGPT-2.0在权威第三方评测机构SuperCLUE发布的《中文大模型基准评测2024年8月报告》中表现卓越&#xff0c;荣获多项第一&#xff0c;标志着OPPO在AI领域的技术实力进一步得到行业认可。 AndesGPT-2.0在总榜上位列国内大模型第二&#xff0c;同…

简单题27 - 移除元素(Java)20240917

问题描述&#xff1a; 代码&#xff1a; class Solution {public int removeElement(int[] nums, int val) {int k 0; // k指针用于记录不等于val的元素放置位置for (int i 0; i < nums.length; i) {if (nums[i] ! val) {nums[k] nums[i]; // 如果元素不等于val&#…

7.4 溪降技术:滑行

目录 7.4 滑行概览观看视频课程电子书: 滑行一级基本原则滑道评估接近滑行着陆 V7提示&#xff1a;着陆技巧总结 7.4 滑行 概览 滑入深潭 滑行是顺着瀑布下降的一种独特且有趣的方式。河流冲刷岩石在峡谷中形成了水道、滑梯或滑道。滑梯可以有不同的长度、高度、轨迹和水量。随…

【踩坑】Gradle依赖下载问题解决:stributions/gradle-8.10-bin.zip failed: timeout (10000ms)

在构建项目时&#xff0c;Gradle 默认会从 https://services.gradle.org/distributions/ 下载对应版本的 Gradle 包。由于网络问题&#xff0c;这个过程可能非常缓慢&#xff0c;甚至会出现下载失败的情况。为了解决这一问题&#xff0c;我将 gradle-wrapper.properties 文件中…

电路设计学习(一)

FUSB302BUCX 可编程 USB Type-C 控制器&#xff0c;带 PD&#xff08;默认 SNK&#xff09; FUSB302BUCX 是一款由 ON Semiconductor 生产的 USB Type-C 控制器&#xff0c;用于实现 USB Type-C 和 USB Power Delivery (PD) 协议。它主要负责 USB Type-C 端口的检测、CC 引脚…