首页 > 其他分享 >方法引用

方法引用

时间:2023-03-25 20:45:11浏览次数:40  
标签:arr list 引用 new 方法 public

方法引用

1、概述

顾名思义:

方法就是我们之前学习的方法

引用就是把已经有的方法拿过来用,把他当做函数式接口中抽象方法的方法体(引用的方法,可以是Java已经写好的,也可以是一些第三方工具类)

例如:Arrays.sort(arr,比较规则);

我们之前都是在第二个参数里面写匿名内部类或者Lambda表达式,方法引用呢实际就是可以在第二个参数那里直接调用你的方法,那个方法是你自己定义好的比较规则。

在之后的MyBatis Plus 的学习中将会频繁用到方法引用。

注意点:

  • 引用出必须是函数式接口,
  • 被引用的方法必须已经存在。
  • 被引用的方法的形参和返回值必须和需要的抽象方法保持一致。
  • 被引用方法的功能要满足当前需求

方法引用符:: :(双英文冒号)

初爽方法引用

/**
 * @author 戒爱学Java
 * @date 2023/3/23 11:19
 */
public class FunctionDemo1 {
    public static void main(String[] args) {
        //需求:创建一个数组,进行倒序排列
        Integer[] arr = {3, 5, 4, 1, 6, 2};

        //匿名内部类
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1 ;
            }
        });

        //Lambda表达式
        Arrays.sort(arr, (Integer o1, Integer o2)-> {
                return o2 - o1 ;
        });

        //Lambda表达式简化
        Arrays.sort(arr, ( o1,  o2)-> o2 - o1);

        //方法引用
        Arrays.sort(arr,FunctionDemo1::subtraction);
    }

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

}

2、分类

  1. 引用静态方法

    格式:类名: : 静态方法

    范例:Integer: : parseInt

    练习:集合中有以下数据,要求把他们变成int类型

    ​ "1", "2", "3", "4", "5", "6", "7"

    /**
     * @author 戒爱学Java
     * @date 2023/3/23 11:43
     */
    public class FunctionDemo2 {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            Collections.addAll(list,"1", "2", "3", "4", "5", "6", "7");
    
            //1、常规方法:遍历集合,将每个元素进行转换,存到一个新的集合当中
            //2、可以采用流的方法map进行数据类型转换
            list.stream().map(Integer::parseInt).forEach(s -> System.out.print(s + " "));
        }
    }
    
  2. 引用成员方法

    格式:对象: : 成员方法

    1. 引用其他类的成员方法

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

    2. 引用本类的成员方法

      本类:this : : 方法名

      注意点:不能再静态方法里面调用,因为静态方法里没有this关键字

    3. 引用父类的成员方法

      父类:super : : 方法名

      注意点:不能再静态方法里面调用,因为静态方法里没有this关键字

    练习1:集合中有一些名字,按照要求过滤

    /**
     * @author 戒爱学Java
     * @date 2023/3/23 11:48
     */
    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));
        }
    }
    

    练习2:GUI界面中点击事件的方法引用写法

    关于GUI网上了解即可,目前已经被淘汰,不使用了
    用法就是上面写的语法,注意点就是不要再静态方法里使用即可。
    
  3. 引用构造方法

    格式:类名: : new

    范例:Student : : new

    练习:集合里面存储姓名和年龄,比如:张无忌,15 要求:将数据封装成Student对象并收集到List集合中

    //Student里面重载构造函数,那么在使用map方法的时候可以使用引用构造方法来替换规则。
    public Student(String str) {
            String[] arr = str.split(",");
            this.name = arr[0];
            this.age  = Integer.parseInt(arr[1]);
    }
    
    /**
     * @author 戒爱学Java
     * @date 2023/3/23 13:12
     */
    public class FunctionDemo4 {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            Collections.addAll(list,"张无忌,10","赵敏,15","周芷若,20","张强,35","张三丰,60",
                    "张翠山,11","张良,22","王麻子,33","谢广坤,44");
            List<Student> newList = list.stream().map(Student::new).collect(Collectors.toList());
            System.out.println(newList);
        }
    }
    
  4. 其他调用该方式

    1. 使用类名引用成员方法

      格式:类名: : 成员方法

      范例:String : : substring

      练习:集合里面一些字符串,要求变成大写后进行输出。

      /**
       * @author 戒爱学Java
       * @date 2023/3/23 13:33
       */
      public class FunctionDemo5 {
          public static void main(String[] args) {
              ArrayList<String> list = new ArrayList<>();
              Collections.addAll(list,"aaa","bbb","ccc","ddd","fff","ggg");
              list.stream().map(String::toUpperCase).forEach(s-> System.out.println(s));
          }
      }
      

      抽象方法形参的详解:
      第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法
      在Stream流当中,第一个参数一般都表示流里面的每一个数据。
      假设流里面的数据是字符串,那么使用这种方式进行方法引用,只能引用string这个类中的方法
      第二个参数到最后一个参数:跟被引用方法的形参保持一致,如果没有第二个参数,说明被引用的方法需要是无参的成员方法

    2. 引用数组的构造方法

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

      范例:int[]: : new

      练习:集合里面存一些整数,收到数组当中。

      /**
       * @author 戒爱学Java
       * @date 2023/3/23 14:20
       */
      public class FunctionDemo6 {
          public static void main(String[] args) {
              ArrayList<Integer> list = new ArrayList<>();
              Collections.addAll(list,1,2,3,4,5,6,7);
              Integer[] arr = list.stream().toArray(Integer[]::new);
              System.out.println(Arrays.toString(arr));
          }
      }
      

标签:arr,list,引用,new,方法,public
From: https://www.cnblogs.com/jundong2177/p/17255542.html

相关文章

  • 什么是耦合?解耦合的方法有哪几种?
    项目的开发过程中,我们经常强调项目的代码模块尽量做到低耦合高内聚,但是什么是耦合?怎样做到低耦合?什么是耦合?耦合指的就是两个类之间的联系的紧密程度,看下面这段代码:publ......
  • Java获取系统时间的4种方法
    Java获取系统时间的4种方法1publicDateTime(){2//1.设置时间格式3/*4*yyyy-MM-dd:年-月-日2023-03-255......
  • mysql手动实现窗口函数的方法
    背景:窗口函数是一种强大的SQL函数,它允许在查询中对一组行进行计算,而不需要将它们分组或汇总。然而,如果使用的MySQL版本不支持窗口函数,我们仍然可以通过一些技巧手动实现它......
  • [FastAPI-23]响应体pydantic dict方法
    importtypingfromfastapiimportFastAPI,Responsefromfastapi.responsesimportJSONResponsefrompydanticimportBaseModelapp=FastAPI()'''pydanticd......
  • 用pyinstaller 打包程序碰到的问题和解决方法(scipy...)
    一、打包程序库选择py2exe.不支持python3cx_Freeze.现在只更新到python3.3pyinstaller.支持python2、python3所有版本因为现在使用的版本是python3.6,所以......
  • 方法重写
    方法重写方法重写只跟非静态方法有关重写:需要有继承关系,子类重写父类的方法!!方法名必须相同参数列表必须相同修饰符:范围可以扩大public>protected>default>priv......
  • 知识图谱推荐算法-基于嵌入的推荐方法
    基于嵌入的方法使用知识图谱中的信息来丰富用户或项目的表示,通过知识图谱嵌入将知识图谱中的实体和关系表征为低维向量,保留了知识图谱原有的结构。知识图谱通常存在链......
  • Barzilai-Borwein(BB)方法
    BB方法,即Barzilai-Borwein(BB)method是梯度下降方法的一种,他主要是通过近似牛顿方法来实现更快的收敛速度,同时避免计算二阶导数带来的计算复杂度:经典牛顿法:首先,设$f......
  • Go语言拼接URL路径的三种方法
    Go语言拼接URL路径有多种方法建议用ResolveReference。JoinPathJoinPath会把多个多个路径合并成一个路径,并且处理../和./,多个//合并成单个/。packagemainimport( "fmt"......
  • Activity通过构造方法和普通方法向Fragment传递参数
    今天学习了Activity通过构造方法和普通方法向Fragment传递参数这种方式的缺点是传递数据量较少看一下效果:  代码实现:这里示例了两种方法,一个是用构造方法,一个是普......