上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

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

guduadmin12小时前

🎊专栏【JavaSE】

🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。

🎆音乐分享【The truth that you leave】

🥰欢迎并且感谢大家指出我的问题

文章目录

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

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第1张

                🍔概述

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

                使用::来引用

                🍔注意

                1.引用处需要是函数式接口

                2.被引用的方法需要已经存在

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

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

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

                查看的是new后面的东西是否是函数式接口

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第2张

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第3张

                🍔示例

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

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第4张

                方法引用

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第5张

                🎄方法引用的分类

                🏳️‍🌈引用静态方法

                格式:类名 :: 静态方法

                例如:Integer::parseInt

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第6张

                🏳️‍🌈引用成员方法

                格式:对象 :: 成员方法

                例如

                其他类:其他类对象 :: 方法名

                本类:this :: 方法名

                父类:super :: 方法名

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第7张

                🛸注意

                静态方法是没有this的

                所以下图会报错

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第8张

                🏳️‍🌈引用构造方法

                格式:类名 :: 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 list = new ArrayList<>();
                        //2.添加数据
                        Collections.addAll(list, "张无忌,15", "周芷若,14", "赵敏,13", "张强,20", "张三丰,100", "张翠山,40", "张良,35", "王二麻子,37", "谢广坤,41");
                        //3.封装成Student对象并收集到List集合中
                        //String --> Student
                      /*  List newList = list.stream().map(new Function() {
                            @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 newList2 = list.stream().map(Student::new).collect(Collectors.toList());
                        System.out.println(newList2);
                    }
                }
                

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

                格式:类名 :: 成员方法

                例子:String :: substring

                🛸方法引用的规则:

                1.需要有函数式接口

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

                3.被引用方法的形参,需要跟抽象方法的第二个形参到最后一个形参保持一致,返回值需要保持一致。

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

                🛸抽象方法形参的详解:

                第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法

                在Stream流当中,第一个参数一般都表示流里面的每一个数据。

                假设流里面的数据是字符串,那么使用这种方式进行方法引用,只能引用String这个类中的方法

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

                🛸局限性:

                不能引用所有类中的成员方法。

                是跟抽象方法的第一个参数有关,这个参数是什么类型的,那么就只能引用这个类中的方法。

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第9张

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

                格式:数据类型[ ] :: new

                例子:int[ ] :: new

                🛸注意

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

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第10张

                🍔总结

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第11张

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第12张

                🍔彩蛋

                【从入门到起飞】JavaSE—方法引用,在这里插入图片描述,第13张

网友评论