Java———方法的引用

42 阅读2分钟

方法引用概述

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

方法引用符: ::

方法引用规则:

  1. 引用出必须是函数式接口
  2. 被引用的方法必须已存在
  3. 被引用的方法的形参与返回值必须和抽象方法保持一致
  4. 被引用方法必须满足当前功能要求
{
Arrays.sort(arr,FunctionDemo1::subtraction); //静态方法类名调用
    System.out.println(Arrays.toString(arr));
}
private static int subtraction(int o1,int o2) {
    return o2 - o1;
}

引用静态方法

格式:类名::静态方法

范例:Integer::parseInt

list.stream().map(Integer::parseInt).forEach(s -> System.out.println(s));

引用成员方法

格式:对象::成员方法

  1. 其他类:其他类对象::方法名
  2. 本类:this::方法名
  3. 父类:super::方法名

注:2.和3.的引用方法不能是静态方法

引用构造方法

格式:类名::new

范例:Student::new(目的就是为了创建对象)

其他调用方式

使用类名引用成员方法

格式:类名::成员方法

特有规则:

  1. 需要有函数式接口
  2. 被引用的方法必须存在
  3. 被引用方法的形参,需要和抽象方法的第二个形参到最后一个形参保持一致,返回值也要保持一致
  4. 被引用的方法的功能需要满足当前需求

抽象方法形参详解:
第一个参数:

表示被引用方法的调用者,决定了可以引用哪些类的方法。

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

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

第二个参数到最后一个参数:

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

引用数组的构造方法

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

目的:创建一个指定类型的数组

细节:数组的类型,需要和流中的数据的类型保持一致

//1.创建集合并添加元素
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list, 1, 2, 3, 4, 5);

//2.收集到数组中
Integer[] arr2 = list.stream.toArray(Integer[]::new);
System.out.println(Arrays.toString(arr2));