【从入门到起飞】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

🛸注意

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

🍔总结


🍔彩蛋

相关推荐
Buleall1 分钟前
期末考学C
java·开发语言
重生之绝世牛码3 分钟前
Java设计模式 —— 【结构型模式】外观模式详解
java·大数据·开发语言·设计模式·设计原则·外观模式
小蜗牛慢慢爬行9 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
Algorithm157619 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
shinelord明28 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
新手小袁_J34 分钟前
JDK11下载安装和配置超详细过程
java·spring cloud·jdk·maven·mybatis·jdk11
呆呆小雅34 分钟前
C#关键字volatile
java·redis·c#
Monly2135 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
boligongzhu36 分钟前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa
Eric.Lee202136 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频