方法引用

使用情景

当要传递给lambda体的操作,已经有实现的方法了,可以使用方法引用。

方法引用也是函数式接口的实例

使用格式 (类(对象):: 方法名

①对象 :: 非静态方法

②类 :: 静态方法

③类 :: 非静态方法

使用要求

要求接口中的抽象方法的形参列表和返回值类型与方法引用的方法的形参列表和返回值类型相同。(适用情况①②)

//对象::实例方法
    //Consumer中的void accept(T t)
    //PrintStream中的void println(T t)
    @Test
    public void test1(){
        Consumer<String> con = s -> System.out.println(s);
        con.accept("上海");//上海

        Consumer<String> con1 = System.out::println;
        con1.accept("上海");//上海
    }

    //类::静态方法
    //Comparator中的int compare(T t1,T t2)
    //Integer中的int compare(T t1,T t2)
    @Test
    public void test2(){
        Comparator<Integer> com = (t1, t2) -> Integer.compare(t1,t2);
        int compare = com.compare(10, 11);
        System.out.println(compare);//-1

        Comparator<Integer> com1 = Integer::compare;
        int compare1 = com1.compare(3, 1);
        System.out.println(compare1);//1
    }

    //类::实例方法
    //Comparator中的int compare(T t1,T t2)
    //String中的int t1.compareTo(t2),t1调用方法中的参数为t2
    @Test
    public void test3(){
        Comparator<String> com = (t1, t2) -> t1.compareTo(t2);
        int compare = com.compare("aa","ad");
        System.out.println(compare);//-3

        Comparator<String> com1 = String :: compareTo;
        int compare1 = com1.compare("aa", "ad");
        System.out.println(compare1);//-3

    }

  

 

posted @ 2022-09-08 22:54  Mr_sven  阅读(21)  评论(0编辑  收藏  举报