java8新特性方法引用

/**
 * 方法引用和構造器引用
 *    1.使用情景:當要傳遞給lambda體的操作,已經有方法實現了,就可以使用方法引用;
 *    2.方法引用:本質上就是Lambda表達式,而lambda表達式作爲函數式接口的實例,所以
 *    方法引用,也就是函數式接口的實例;
 *    3.使用格式:類(或對象) :: 方法名
 *    4.具體分爲如下三種情況:
 *      情況一: 對象:: 非靜態方法
 *              類  :: 靜態方法
 *
 *       情況二:類 :: 非靜態方法(有難度)
 *    5.方法引用使用的要求,要求接口中的抽象方法的形參列表和返回值類型與方法引用的方法的
 *    形參列表和返回值類型相同!(只針對情況一,不適用於情況二)
 */
public class MethodReferences {
    /**
     * 情況一:對象:: 非靜態方法
     * Consumer 中的void accept(T t)
     * PrintStream 中的void println(T t)
     */
    @Test
    public void text(){
        Consumer<String> consumer=str -> System.out.println(str);
        consumer.accept("橋邊姑娘");
        System.out.println("**************************");
        PrintStream ps=System.out;
        Consumer<String> cns=ps :: println;
        cns.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);
        System.out.println(com.compare(11,12));
        System.out.println("*************************");
        Comparator<Integer> com2=Integer::compareTo;
        System.out.println(com2.compare(1111111,12));
    }
    /**
     *  情況二:類 :: 非靜態方法(有難度)
     *  Comparator中的 int  compare(T t1,T t2)
     *  String中的 int   t1.compareTo(t2)
     *
     */
    @Test
    public void text3(){
        Comparator<String> com=(t1,t2)-> t1.compareTo(t2);
        System.out.println(com.compare("t1","t2"));
        System.out.println("**************************");
        Comparator<String> com2=String::compareTo;
        System.out.println(com2.compare("t1","t2"));
    }
    /**
     *  情況二:類 :: 非靜態方法(有難度)
     *  BiPredicate中的 boolean  test(T t1,T t2)
     *  String中的 boolean   t1.equals(t2)
     *
     */
    @Test
    public void text4(){
        BiPredicate<String,String> bip=(t1,t2)->t1.equals(t2);
        System.out.println(bip.test("十大","asd"));
        System.out.println("**************************");
        BiPredicate<String,String> bip2=String::equals;
        System.out.println(bip2.test("十大","十大"));
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章