JDK8-1-Lambda表达式(4)-方法引用
方法引用可以被看作调用特定方法的 Lambda 表达式的一种快捷写法,主要分为以下几种情况:
- 对象::方法名
- 类名::静态方法
- 类名::普通方法
- 类名::new (实例化对象)
对象::方法名
下例中,date 为 Date 类型的对象,supplier 接收的 Lambda 表达式方法体中返回时间戳
public static void test1() {
Date date = new Date();
Supplier<Long> supplier = () -> date.getTime();
System.out.println(supplier.get());
}
使用引用语法改写后:
public static void test1_2() {
Date date = new Date();
Supplier<Long> supplier = date::getTime;
System.out.println(supplier.get());
}
看一个带参数的例子:
public static void test2() {
String str = "abcdef";
BiFunction<Integer, Integer, String> function = (i, j) -> str.substring(i, j);
System.out.println(function.apply(1, 3));
}
改写后:
public static void test2_2() {
String str = "abcdef";
BiFunction<Integer, Integer, String> function = str::substring;
System.out.println(function.apply(1, 3));
}
类名::静态方法
public static void test3() {
Supplier<Integer> supplier = ()-> LocalDate.now().getYear();
System.out.println(supplier.get());
Supplier<Integer> supplier2 = LocalDate.now()::getYear;
System.out.println(supplier2.get());
}
类名::普通方法
public static void test4() {
BiFunction<String,Integer,String> function = (str,i)-> str.substring(i) ;
System.out.println(function.apply("abc",1));
BiFunction<String,Integer,String> function2 = String::substring; ;
System.out.println(function2.apply("abc",1));
}
类名::new
public static void test5() {
Supplier<Date> supplier = ()-> new Date();
System.out.println(supplier.get());
Supplier<Date> supplier2 = Date::new ;
System.out.println(supplier2.get());
}