Java8 學習筆記--函數式接口與lambda表達式的關係

在java中,lambda表達式與函數式接口是不可分割的,都是結合起來使用的。java

對於函數式接口,咱們能夠理解爲只有一個抽象方法的接口,除此以外它和別的接口相比並無什麼特殊的地方。爲了確保函數式接口的正確性,咱們能夠給這個接口添加@FunctionalInterface註解(固然,也能夠不加此註解),這樣當其中有超過一個抽象方法時就會報錯。函數

對於其餘類型的接口,咱們想要使用就須要定義一個類(或者使用匿名類)來實現那個接口和其中的方法,而函數式接口除了使用普通的方法來實現以外,還有一種更加簡單的方法---就是使用lambda表達式。lambda表達式咱們能夠理解對於函數式接口和其中的抽象方法的具體實現,這樣當有一個須要函數式接口參數的方法時,咱們就能夠給其傳遞一個對應的lambda表達式做爲參數。執行的時候就會自動執行函數式接口中的惟一方法,也就是傳遞過去的lambda表達式了。spa

下面咱們來舉一個例子具體說明一下:code

有以下代碼List<String> list = Arrays.asList("d", "h", "a", "z", "b");blog

咱們要對其進行排序,有一個對應的list.sort(Comparator<? super E> c)方法,須要咱們傳遞一個Comparator接口的實例,而Comparator之中惟一的抽象方法爲int compare(T o1, T o2),徹底符合咱們以前的函數式接口的定義,而且它還使用了@FunctionalInterface註解,因此除了普通的實現方法以外咱們可使用lambda表達式來實現這個方法,具體代碼以下:排序

List<String> list = Arrays.asList("d", "h", "a", "z", "b");
list.sort((String a, String b) -> {
    return a.compareTo(b);
});

其至關於:接口

List<String> list = Arrays.asList("d", "h", "a", "z", "b");
Comparator<String> comparator = (String a, String b) -> {
    return a.compareTo(b);
};  // 使用lambda表達式實現函數式接口,並賦值
list.sort(comparator);

固然,對於上面的lambda表達式有不少簡略寫法,這是主要說明它和函數式接口的關係,關於lambda表達式的其餘不少的使用方法你們能夠去具體查詢使用。io

相關文章
相關標籤/搜索