有了stream流式計算,結合著函式式介面和鏈式呼叫,對於資料的處理變得更加簡單,同時增強可讀性。
比如我們有乙個user類:
@data
@allargsconstructor
@noargsconstructor
public
class
user
然後有一些user物件:
user user1 =
newuser(1
,"a",12
);user user2 =
newuser(2
,"b",32
);user user3 =
newuser(3
,"c",15
);user user4 =
newuser(4
,"d",21
);user user5 =
newuser(5
,"e",29
);
我們有這麼一些要求:
/**
* 按要求找到並操作以下user
* 1,年齡為奇數
* 2,名字為大寫
* 將大寫轉為小寫
* 並按名字倒序排序
* 並取出第乙個
*/
要找到年齡為奇數並且名字為大寫的user只要用過濾器就行了。
結果應該是
user user3 =
newuser(3
,"c",15
);user user4 =
newuser(4
,"d",21
);
這兩位。
然後要將名字從大寫改為小寫,就是呼叫tolowercase()
。
順序應該是c d
,倒序就是d c
。呼叫comparator
的reverseorder
方法即可。
只取乙個值,那就是d
了。
我們要的結果就是d
。
**:
users.
stream()
.filter
(u-> u.
getage()
%2==1
).filter
(u-> u.
getname()
.matches
("[a-z]"))
.map
(u->u.
getname()
.tolowercase()
).sorted
(comparator.
reverseorder()
).limit(1
).foreach
(system.out:
:println)
;
filter裡面要傳predicate
,map裡傳function
,sorted裡傳comparator
,foreach要傳乙個consumer
。這四個介面都是函式式介面,抽象方法都只有乙個。 Stream元素流式計算
一 基本使用 1.跟據某個屬性分組officeid map collect list.stream collect collectors.groupingby incomesumpojo getofficeid 2.根據某個屬性分組officeid,彙總某個屬性money mapcollect li...
stream 流式演算法
j a8的流式處理極大的簡化了對於集合的操作,實際上不光是集合,包括陣列 檔案等,只要是可以轉換成流,我們都可以借助流式處理,類似於我們寫sql語句一樣對其進行操作。j a8通過內部迭代來實現對流的處理,乙個流式處理可以分為三個部分 轉換成流 中間操作 終端操作 關於list.stream map ...
流式思想概述(Stream
整體來看,流式思想類似於工廠車間的 生產流水線 這張圖中展示了過濾 對映 跳過 計數等多步操作,這是一種集合元素的處理方案,而方案就是一種 函式模 型 圖中的每乙個方框都是乙個 流 呼叫指定的方法,可以從乙個流模型轉換為另乙個流模型。而最右側的數字 3是最終結果。這裡的 filter map ski...