第三章 Lambda 表達式

1、Lambda管中窺豹java

一、lambda沒有名稱,但它有參數列表,函數主體,返回類型,可能還有一個能夠拋出的異常列表。express

二、基本語法:函數

(parameters)->expression
或
(parameters)->{statements;}

2、在哪裏以及如何使用Lambdathis

一、函數式接口3d

(1)函數式接口就是隻定義一個抽象方法的接口(能夠有多個默認方法)code

(2)Lambda表達式容許你直接之內聯的形式爲函數式接口的抽象方法提供實現,並把整個表達式做爲函數式接口的實例(具體來講,是函數式接口一個具體實現的實例)對象

二、函數描述符blog

函數式接口的抽象方法的簽名基本上就是Lambda表達式的簽名。接口

3、把Lambda付諸實踐:環繞執行模式get

一、第1步,記得行爲參數化

public static String processFileLimited() throws IOException {
    try (BufferedReader br =
                 new BufferedReader(new FileReader("lambdasinaction/chap3/data.txt"))) {
        return br.readLine();
    }
}

二、第2步,使用函數式接口來傳遞行爲

public interface BufferedReaderProcessor{
   public String process(BufferedReader b) throws IOException;

}

public static String processFile(BufferedReaderProcessor p) throws IOException {
}

三、第3步:執行一個行爲

public static String processFile(BufferedReaderProcessor p) throws IOException {
   try(BufferedReader br = new BufferedReader(new FileReader("lambdasinaction/chap3/data.txt"))){
      return p.process(br);
   }

}

四、第4步:傳遞Lambda

String oneLine = processFile((BufferedReader b) -> b.readLine());
System.out.println(oneLine);

String twoLines = processFile((BufferedReader b) -> b.readLine() + b.readLine());
System.out.println(twoLines);

4、使用函數式接口

5、類型檢查、類型推斷以及限制

一、類型檢查

類型檢查過程能夠分解爲以下所示。

首先、你要找出filter方法的聲明

第2、要求它是Predicate<Apple>(目標類型)對象的第二個正式參數。

第3、Predicate<Apple>是一個函數式接口,定義了一個叫做test的抽象方法。

第4、test方法描述了一個函數描述符,它能夠接收一個Apple,並返回一個boolean

最後、filter的任何實際參數都必須匹配這個要求。

二、一樣的Lambda,不一樣的函數式接口

Comparator<Apple> c1 =(Apple a1,Apple a2)->a1.getWeight().compareTo(a2.getWeight()):
ToIntBiFunction<Apple,Apple> c2 =(Apple a1, Apple a2)->a1.getWeight().compareTo(a2.getWeight()):
BiFunction<Apple,Apple,Integer> c3 =(Apple a1, Apple a2)->a1.getWeight().compareTo(a2.getWeight()):

三、類型推斷

編譯器能夠了解Lambda表達式的參數類型,這樣就能夠在Lambda語法中省去標註參數類型。

四、使用局部變量

Lambda能夠沒有限制地捕獲(也就是在其主體中引用)實例變量和靜態變量。但局部變量必須顯示聲明final,或事實上是final。換句話說,Lambda表達式只能捕獲指派給它們的局部變量。(注:捕獲實例變量能夠被看作捕獲最終局部變量this)

6、方法引用

一、管中窺豹

使用方法引用時,目標引用放在分隔符::前,方法的名稱放在後面。

二、構造函數引用

7、Lambda和方法引用實戰

8、符合Lambda表達式的有用方法

一、比較器複合

(1)、逆序

(2)、比較器鏈

二、謂詞複合

謂詞接口包括三個方法:neget、and和or

三、函數複合

9、數學中的相似思想

一、積分

二、與java8的Lambda聯繫起來

相關文章
相關標籤/搜索