jdk1.8之前的介面不可以有方法體,但從jdk1.8開始,介面中的方法可以帶有方法體
為什麼要新增這個特性?介面就是為了定義乙個標準,這個標準要求所有的實現類實現這些抽象方法。
但存在某些方法,所有的實現類**都是一樣的,索性就把這些**挪到介面中。
使用的方法?通過default來修飾這個方法
public
inte***ce
ianimal
}
實現類可以不必實現這個方法
public
class
person
implements
ianimal
}
測試
public
class
test
}
測試效果如圖:
lambda效果與匿名函式的效果類似
先決條件目標方法的引數是乙個介面
介面中只有乙個抽象方法,且這個抽象方法不是object裡面的方法
介面最好頂乙個註解:@functionalinte***ce
使用方法(方法的形參) ->
如果目標方法只有乙個引數,可以省略小括號
小括號裡面的形參:型別可以省略
如果方法體只有一行,大括號可以省略
實戰**thread t =
介面名抽象方法
含義consumer< t >
void accept(t t)
消費者,無返回值
supplier< t >
t get();
**商,它是把資料,直接返回了
function
t:輸入型別,r:輸出型別,將傳入的資料轉變成輸出的結果
predicate< t >
boolean test(t t);
斷言:泛型是輸入資料的型別;過濾:如果返回值是true,則在容器中保留,否則刪除
分類
方法的返回值還是stream:(transformaction運算元)
方法的返回值不是stream:(action運算元)
介紹資料流程式設計的處理就像是像一根帶閥門的管子裡注水,每次處理就是一道閥門,水流就是資料,
只有乙個資料處理完成之後,才會處理另乙份資料
運算元介紹
transformaction運算元
1.stream filterstream = soustream.filter( (t) -> t > 50);
過濾資料,只保留值大於50的資料
2:stream mapstream = soustream.map( (t) -> t + 「」);
把輸入引數,經過乙個方法變成另外乙個引數
3: stream flatmapstream = soustream.flatmap( t -
);把輸入引數,經過乙個方法變成另外乙個引數(stream型別)
4:stream stream = soustream.distinct()
去重5:stream stream = soustream.limit(2);
取前幾條資料
6:stream stream = soustream.skip(2);
跳過前幾條資料
7:stream stream = soustream.sorted();
排序(公升序)
action運算元
1:stream.foreach( t -> system.out.println(t));
迴圈2:object arrays = stream.toarray()
將資料轉為陣列
3:long count = stream.count()
統計數量
4:optional findfirst = stream.findfirst()
查詢第乙個元素
5:iterator iterator = stream.iterator()
轉換成迭代器
6:optional maxoption = stream.max( (t1,t2) -> t1 - t2)
最大值,排序後獲取最後乙個
7::optional minoption = stream.min( (t1,t2) -> t1 - t2)
最小值,排序後獲取第乙個
8:optional reduce = stream.reduce((t1, t2) -> t1 + t2);
縮減資料,將第乙個資料,第二個資料作為第乙個引數,第二個引數傳進去進行處理,得到乙個資料,將這個資料作為第乙個引數,第三個資料作為 第二個引數傳入進行第二次處理,以此類推
JDK1 8新特性簡介
可以用static default來定義介面方法 用default來定義普通方法,這樣子類就不用強制覆寫這個方法了。用static來定義靜態方法 專給lanmda使用的介面加上annotation functionalinte ce 其中只能有乙個方法 使用 引數 程式執行語句 引數 簡單返回 引數...
JDK1 8 新特性(全)
hashmap資料結構 在jdk1.8中對hashmap等map集合的資料結構優化。hashmap資料結構的優化 知識點 1 原來的hashmap採用的資料結構是雜湊表 陣列 鍊錶 hashmap預設大小是16,乙個0 15索引的陣列,2 如何往裡面儲存元素 首先呼叫元素的hashcode 方法,計...
JDK1 8新特性 方法引用
方法引用是對lamdba的一種優化,因此,能用方法引用的地方,一定能用lamdba表示式。使用lamdba表示式,方法的引數必須是函式式介面,所以使用方法引用也要有乙個函式式介面。前提 物件已經存在,方法已經存在,就能使用了 前提 物件是已經存在的,成員方法也是已經存在的 定義乙個函式式介面 fun...