1. 程式人生 > >java基礎 Lambda作為方法的返回值

java基礎 Lambda作為方法的返回值

  • 開發環境 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表示式。