今天再來給大家介紹下函數式接口和方法引用。
函數式接口
問:Lambda?表達式的類型是什么?
答:函數式接口
問:函數式接口是什么?
答:只包含一個抽象方法的接口,稱為函數式接口 (functional interface) , 一般用 @FunctionalInterface 注解來檢測是否是函數式接口。
自定義函數式接口
@FunctionalInterface
public interface MyFunctionalInterface {String test(String p);
}使用泛型
@FunctionalInterface
public interface MyFunctionalInterface<T,R> {R test(T t);
}
函數式接口作為方法參數
public void test(MyFunctionalInterface mfi,String str) {System.out.println(mfi.getValue(str));
}調用test()
test(p -> p.toUpperCase(),"luojie");
控制臺輸出:
LUOJIE
常見函數式接口
方法引用
問:什么是方法引用?
答:當我們需要完成的 Lambda 體操作,已經有實現的方法了,可以使用方法引用!
問:為什么用方法引用?
答:省略參數,少寫代碼
舉個例子
Comparator<Integer> com2 = (x, y) -> Integer.compare(x,y);
//上面我們之前學過的Lambda表達式,其中Lambda體操作是比較兩個整數的大小,
//而且Integer的compare()正好完就是我需要完成的操作。
//可以方法引用替代
Comparator<Integer> com3 = Integer::compare;
方法引用格式
方法引用使用操作符 :: 將方法名和對象或類的名字分開。
分三種格式:
-
類::靜態方法
-
對象::實例方法
-
類::實例方法
類::靜態方法
(x, y) -> Integer.compare(x,y);
方法引用改造:
Integer::compare;
對象::實例方法
(x) -> System.out.printf(x);
方法引用改造:
System.out::println;
類::實例方法
test((x,y)->x.equals(y),"123","123");
方法引用改造:
test(String::equals,"123","abc");
注意:當引用方法的第一個參數是調用對象,并且第二個參數是需要傳入參數(或無參數)時:ClassName::methodName
比如上例子中:"123"當作equals方法調用對象,"abc"為傳入equals()參數。
相當于:"123".equals("abc")
?
作為一個軟件測試的過來人,我想盡自己最大的努力,幫助每一個伙伴都能順利找到工作。所以我整理了下面這份資源,現在免費分享給大家,有需要的小伙伴可以關注【公眾號:開心螺螄粉】自提!
軟件測試面試文檔
我們學習必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節等一線互聯網大廠最新的面試資料,并且有字節大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
行動吧,在路上總比一直觀望的要好,未來的你肯定會感謝現在拼搏的自己!如果想學習提升找不到資料,沒人答疑解惑時,請及時加入群:1150305204,里面有各種測試開發資料和技術可以一起交流哦。