Java8 方法引用
阿新 • • 發佈:2020-09-02
方法引用
方法引用可以被看作僅僅呼叫特定方法的Lambda的一種快捷寫法。如果一個Lambda代表的只是“直接呼叫這個方法”,那最好還是用名稱來呼叫它,而不是去描述如何呼叫它。
當要傳遞給Lambda體的操作,已經有實現的方法了,可以使用方法引用。
構建方式
類 :: 靜態方法
Comparator<Integer>com2=Integer::compare;
System.out.println(com2.compare(12,3));類 :: 非靜態方法:你在引用一個物件的方法,譬如String::length,而這個物件是Lambda表示式的一個引數。舉個例子,Lambda表示式(String s) -> s.toUppeCase()可以重寫成String::toUpperCase
Comparator<String>com1=(s1,s2)->s1.compareTo(s2);
System.out.println(com1.compare("abc","abd"));
System.out.println("*******************");
Comparator<String>com2=String::compareTo;
System.out.println(com2.compare("abd","abm"));物件 :: 非靜態方法
PrintStreamps=System.out;
Consumer<String>con2=ps::println;
建構函式引用
對於一個現有建構函式,你可以利用它的名稱和關鍵字new來建立它的一個引用:ClassName::new。它的功能與指向靜態方法的引用類似。
Supplier中的T get()
Supplier<Employee>sup=()->newEmployee();
System.out.println("*******************");
Supplier<Employee>sup1=()->newEmployee();
System.out.println(sup1.get());
System.out.println("*******************"
Supplier<Employee>sup2=Employee::new;
System.out.println(sup2.get());Function中的R apply(T t)
Function<Integer,Employee>func1=id->newEmployee(id);
Employeeemployee=func1.apply(1001);
System.out.println(employee);
System.out.println("*******************");
Function<Integer,Employee>func2=Employee::new;
Employeeemployee1=func2.apply(1002);
System.out.println(employee1);BiFunction中的R apply(T t,U u)
BiFunction<Integer,String,Employee>func1=(id,name)->newEmployee(id,name);
System.out.println(func1.apply(1001,"Tom"));
System.out.println("*******************");
BiFunction<Integer,String,Employee>func2=Employee::new;
System.out.println(func2.apply(1002,"Tom"));陣列引用
Function<Integer,String[]>func1=length->newString[length];
String[]arr1=func1.apply(5);
System.out.println(Arrays.toString(arr1));
System.out.println("*******************");
Function<Integer,String[]>func2=String[]::new;
String[]arr2=func2.apply(10);
System.out.println(Arrays.toString(arr2));