[Java][方法引用]以数组为例讲解匿名内部类/lambda/方法引用

2023-12-17 11:36:27

?需求:对一个Integer类型的数组进行倒序排列

思路:使用Arrays工具类中的sort进行快速排序

具体操作逻辑:

A:最复杂的:new Comparator然后写匿名内部类

B:略微简化的:使用Lambda表达式把变量名 匿名内部类的类名省去

C:最优化的:我们额外创建一个类Substraction 然后在Substraction中写好我们需要判断的原则

在保证形参 功能一致的前提下将其“方法引用”到Arrays.sort(arr,);的规则当中

对C这种操作逻辑而言:我们来复盘一下需要满足的规则

//1.引用的地方需要是函数式接口
//2.被引用的方法要已经存在
//3.被引用的方法的返回值要和接口处的返回值保持一致
//4.被引用的方法功能需要满足当前的要求
import java.util.Arrays;
import java.util.Comparator;

public class Main{
    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,(o1,o2)->o2-o1);

        //lambda还能简化
        Arrays.sort(arr,(o1,o2)->o2-o1);
        Arrays.sort(arr,(o1,o2)->(o2-o1));

        //方法引用

        //1.引用的地方需要是函数式接口
        //2.被引用的方法要已经存在
        //3.被引用的方法的返回值要和接口处的返回值保持一致
        //4.被引用的方法功能需要满足当前的要求
        Arrays.sort(arr,Main::substraction);
        Arrays.sort(arr,Main::substraction);
        //::是方法引用运算符 方法作为值传递
        //补充知识:想调用一个静态的方法 需要类名.方法名 如下
        Main.substraction(1,2);


    }
    public static Integer substraction(Integer o1,Integer o2){return o2-o1;}
}

文章来源:https://blog.csdn.net/qq_37511412/article/details/135042487
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。