java基礎 Lambda作為方法的返回值
阿新 • • 發佈:2018-12-12
- 開發環境 jdk1.8
傳統的使用Comparator來進行排序, 從大到小的輸出的寫法如下, 需要使用 new Comparator來建立一個匿名的內部類來進行比較. 由於是從大到小降序,所以用o2-o1
public static void main(String[] args) { String[] array = {"abc", "jk", "aghjghj", "u"}; System.out.println(Arrays.toString(array)); // 進行一次排序 按照 長度 由 大 到 小 排序 Arrays.sort(array, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.length() - o1.length(); } }); System.out.println(Arrays.toString(array)); }
使用Lambda後,可以直接在 Arrays.sort方法裡面,傳遞一個Comparator介面的實現類,該實現類就是Lambda的返回值. 程式碼如下
public class Demo02Comparator { // 函式式介面 作為返回值型別 返回的是 其例項 實現類物件 private static Comparator<String> newComparator() { //return 要的是函式式介面的例項 return (String a, String b)->{ return b.length()-a.length(); }; } public static void main(String[] yu) { String[] array={"abc", "jk", "aghjghj", "u"}; System.out.println(Arrays.toString(array)); //排序,長度由大到小輸出 Arrays.sort(array, newComparator()); System.out.println(Arrays.toString(array)); } }
控制檯列印如下 其中newComparator方法可以簡化如下 引數a,b去掉了String,原因是lambda的可推導即可省略特性
private static Comparator<String> newComparator() {
//return 要的是函式式介面的例項
return (a, b)-> b.length()-a.length();
}
省略寫法的規則為: 1. 小括號內參數的型別可以省略; 2. 如果小括號內有且僅有一個參,則小括號可以省略; 3. 如果大括號內有且僅有一個語句,則無論是否有返回值,都可以省略大括號、return關鍵字及語句分號。
因此如果一個方法的返回值型別是一個函式式介面,那麼就可以直接返回一個Lambda表示式。