JDK8 - 方法引用

方法方法引用的使用要求:要求接口中的抽象方法的形参列表和返回值类型与 方法引用中的方法的形参列表和返回值类型相同(针对情况1,情况2)

情况1           对象::非静态方法

情况2           类::静态方法

情况3           类::非静态方法

 

情况1:

public class MethodReferenceTest {
    public static void main(String[] args) {
        //lambda表达式
        Consumer<String> con1 = str -> System.out.println(str);
        con1.accept("hello");
        System.out.println("*****************************");
        //改写方法引用
        PrintStream out = System.out;
        Consumer<String> con2 = out::println;
        con2.accept("hello");
    }
}

 

 

 

情况2:

public class MethodReferenceTest2 {
    public static void main(String[] args) {
        //lambda
        Function<Double, Long> func1 = num -> Math.round(num);
        System.out.println(func1.apply(2.11));

        //方法引用
        Function<Double, Long> func2 = Math::round;
        System.out.println(func2.apply(2.11));
    }
}

 

 

 

 

 

 

 

 情况3例子1:

/**
 *
 * Comparator中的int compare(T t1, T t2)
 * String中的 int t1.compare(t2)
 */
public class MethodReferenceTest3 {
    public static void main(String[] args) {
        // lambda
        Comparator<String> c = (s1, s2) -> s1.compareTo(s2);
        System.out.println(c.compare("abc","abm"));
        System.out.println("*****************************");
        // 方法引用
        Comparator<String> c2 = String::compareTo;
        System.out.println(c2.compare("abc","abm"));
    }
}

 情况3例子2:

public class MethodReferenceTest3 {
    public static void main(String[] args) {
        // lambda
        Person person = new Person("master shi");
        Function<Person, String> func1 = p -> p.getName();
        System.out.println(func1.apply(person));

        // 方法引用
        Function<Person, String> func2 = Person::getName;
        System.out.println(func2.apply(person));
    }
}

 

posted @ 2021-06-15 21:56  圣金巫灵  阅读(90)  评论(0编辑  收藏  举报