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("十大","十大"));
    }
}

 

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