JDK8-1-Lambda表达式(4)-方法引用

JDK8-1-Lambda表达式(4)-方法引用

方法引用可以被看作调用特定方法的 Lambda 表达式的一种快捷写法,主要分为以下几种情况:

  1. 对象::方法名
  2. 类名::静态方法
  3. 类名::普通方法
  4. 类名::new (实例化对象)

对象::方法名

下例中,date 为 Date 类型的对象,supplier 接收的 Lambda 表达式方法体中返回时间戳

public static void test1() {
    Date date = new Date();
    Supplier supplier = () -> date.getTime();
    System.out.println(supplier.get());
}

使用引用语法改写后:

public static void test1_2() {
    Date date = new Date();
    Supplier supplier =  date::getTime;
    System.out.println(supplier.get());
}

看一个带参数的例子:

public static void test2() {
    String str = "abcdef";
    BiFunction function = (i, j) -> str.substring(i, j);
    System.out.println(function.apply(1, 3));
}

改写后:

public static void test2_2() {
    String str = "abcdef";
    BiFunction function = str::substring;
    System.out.println(function.apply(1, 3));
}

类名::静态方法

public static void test3() {
    Supplier supplier = ()-> LocalDate.now().getYear();
    System.out.println(supplier.get());

    Supplier supplier2 = LocalDate.now()::getYear;
    System.out.println(supplier2.get());
}

类名::普通方法

public static void test4() {
    BiFunction function = (str,i)-> str.substring(i) ;
    System.out.println(function.apply("abc",1));

    BiFunction function2 = String::substring; ;
    System.out.println(function2.apply("abc",1));
}

类名::new

public static void test5() {
    Supplier supplier = ()-> new Date();
    System.out.println(supplier.get());

    Supplier supplier2 = Date::new ;
    System.out.println(supplier2.get());
}

你可能感兴趣的:(JavaSE,java,开发语言)