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聯繫起來