Java8裏面主要包含了函數式編程。本文代碼地址.
目錄結構:
第一個大類是Function:
A. Predicate是返回boolean類型Function,執行的是test。
B. Function是R apply(T t);主要用於返回結果。
C. Consumer是主要用於執行的,void accept(T t);通常用於執行異步方法。
D. 除去前面所有的傳入一個參數,還有可以傳入兩個參數的,用法與之前的相同。
第二大類是接口:
A Java8的接口可以有默認的實現方法
B.可以傳入方法
C.接口之間的繼承行爲
D.lambda中的變量應該是final的,而不是隨意更改的
E.使用lambda分別實踐了Comparable和Comparator
Comparable通過改造元素本身來實現排序,Comparator通過編寫排序規則來實現排序
第三大類:stream
Stream是可以多線程,併發執行的。
Stream可以對元素進行分組。
Java8通過新增Optional實現對空指針的處理。
Stream可以Partitioning,的意思就是可以按照要求給元素分組。
求和。
第一個大類是Function:
A. Predicate是返回boolean類型Function,執行的是test,用法有以下幾種:
a. Predicate bonusLambdas = (emp)->emp.getRating()>10?true:false;
b. Predicate execLambdas = (emp)->emp.getName().startsWith("ad")?true:false;
Predicate andLambdas = bonusLambdas.and(execLambdas);
c. Predicate isEqualsLambdas = Predicate.isEqual(new Employee(7,"admins"));
d. employeeList.stream().filter(isEqualsLambdas).collect(Collectors.toList()).forEach(item ->{
System.out.println("isEqualsLambdas: "+item.getRating()+" "+item.getName());
});
e. 自帶的幾個函數:or,and,isEqual,negate
B. Function是R apply(T t);主要用於返回結果,用法有以下幾種:
a. Funciton getMovie = s ->new Movie(s);
private Movie testMovie(String movie){
return getMovie.apply(movie);
}
b.stream中的map就是用Function: Stream map(Function mapper);
並對flatmap學習.
c. Funtion是可以並運算的,andthen先執行前者,後執行後者。compose是先執行後者,再執行前者。
d. Function有個Identify的效果跟原來的一樣。
C. Consumer是主要用於執行的,void accept(T t);通常用於執行異步方法。
D. 除去前面所有的傳入一個參數,還有可以傳入兩個參數的,用法與之前的相同。
第二大類是接口:
A Java8的接口可以有默認的實現方法
主要解決的是一個封裝問題,對於確定性的步驟,我們可以封裝成一個默認的實現。
B.可以傳入方法
C.接口之間的繼承行爲
子類可以訪問父類的默認實現方法,當有多個父類的方法相同可以使用super區分
D.lambda中的變量應該是final的,而不是隨意更改的
E.使用lambda分別實踐了Comparable和Comparator
Comparable通過改造元素本身來實現排序,Comparator通過編寫排序規則來實現排序
第三大類:stream
Stream是可以多線程,併發執行的,通過ForkJoinTask原理:https://blog.csdn.net/u013898617/article/details/79146389
Stream可以對元素進行分組:
Java8通過新增Optional實現對空指針的處理:
Stream可以Partitioning,的意思就是可以按照要求給元素分組:
求和: