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

🎊专栏【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

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

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

🛸注意

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

🍔总结


🍔彩蛋

相关推荐
天天扭码5 分钟前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
程序猿进阶6 分钟前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺10 分钟前
Spring Boot框架Starter组件整理
java·spring boot·后端
zwjapple16 分钟前
typescript里面正则的使用
开发语言·javascript·正则表达式
小五Five18 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
小曲程序18 分钟前
vue3 封装request请求
java·前端·typescript·vue
前端每日三省19 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
凡人的AI工具箱33 分钟前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
陈王卜35 分钟前
django+boostrap实现发布博客权限控制
java·前端·django
小码的头发丝、36 分钟前
Spring Boot 注解
java·spring boot