Lamda表達式學習筆記二 lamda表達式 方法引用 上一篇講到Lamda體就是對函數式介面方法的實現 ,在方法體中我們可能會引用其他方法實現邏輯,所以在lamda體中我們可以直接引用器方法 I 對象::實例方法名 /** * 對象::實例方法名 */ @Test public void test ...
Lamda表達式學習筆記二
lamda表達式----方法引用
上一篇講到Lamda體就是對函數式介面方法的實現 ,在方法體中我們可能會引用其他方法實現邏輯,所以在lamda體中我們可以直接引用器方法
I 對象::實例方法名
/** * 對象::實例方法名 */ @Test public void test6() { Consumer<String> consumer = (x) -> System.out.println(x); consumer.accept("->"); Consumer<String> consumer1 = System.out::println; consumer1.accept("::"); }
結果:
II 類名::靜態方法名
/** * 類名::靜態方法名 */ @Test public void test7() { Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y); Comparator<Integer> comparator1 = Integer::compare; }
III 類名::實例方法名
/** * 類名::實例方法名 */ public void test8() { BiFunction<String, String, Boolean> biFunction = (x, y) -> x.equals(y); BiFunction<String, String, Boolean> biFunction1 = String::equals; }
結論:1、引用的方法與函數式介面中抽象方法的入參出參保持一致
2、使用第三種lamda表達式時,只有入參只能為2個且參數列表中第一個參數是類的實例,參數列表中第二個參數是實例方法的參數時才可以用
I,II僅需滿足結論1,III需要同時滿足結論1和結論2
Lamda表達式----構造器引用
/** * 類名::構造器 */ @Test public void test9() { Supplier<Student> studentSupplier = Student::new; System.out.println("Supplier:" + studentSupplier.get()); Function<String, Student> function = Student::new; System.out.println("Function:" + function.apply("李四")); BiFunction<Integer, Double, Student> biFunction = Student::new; System.out.println("BiFunction:" + biFunction.apply(10, 150.0)); }
結果:
Supplier:Student{name='null', age=null, hight=null} Function:Student{name='李四', age=null, hight=null} BiFunction:Student{name='null', age=10, hight=150.0} Process finished with exit code 0
構造器遵循結論1(引用的方法與函數式介面中抽象方法的入參出參保持一致),是根據構造方法的參數數量來匹配構造方法
個人學習,侵刪
參考:https://www.bilibili.com/video/av62117143