Stream中collect方法在業務中的使用

2021-10-06 02:50:57 字數 1177 閱讀 5279

背景:

在實際業務中,可能需要把資料庫查詢出來資料的某乙個字段(例如:id等唯一值)新增到集合中

@data

class person

// 先查詢資料庫記錄集合

listpersonlist = db.querybycond(***);

// 需要將person中的id全部儲存到新的list,也就是要實現如下功能

// 把id新增到list

listids = new arraylist<>();

for (person person : personlist)

// 或者要把name屬性新增到list

listnames = new arraylist<>();

for (person person : personlist)

很古老,1.8有lambda表示式如何實現暱?

// id新增到集合的結果

listids = personlist.stream().collect(arraylist::new, (list, person) -> list.add(person.getid()), arraylist::addall);

// name新增到集合

listids = personlist.stream().collect(arraylist::new, (list, person) -> list.add(person.getname()), list::addall);

當然name新增到集合實際開發中沒有意義,但如果剛好有乙個唯一欄位也是字串型別,是不是可以照貓畫虎了!

對stream().collect方法的補充:

r collect(suppliersupplier,

biconsumeraccumulator,

biconsumercombiner);

引數supplier 是乙個生成目標型別例項的方法,也就是你想要得到的資料型別;

accumulator是將操作的目標資料填充到supplier 生成的目標型別例項中去的方法,就是如何將元素新增到容器中;

combiner是將多個supplier 生成的例項整合到一起的方法,代表著規約操作,將多個結果合併。

看完這個說明是不是就很容易懂了

java8 stream的collect 三個引數

collect方法有兩個過載 第乙個接收的是collector型別的,可以直接用collectors這類工具傳方法引用。第二個接收的是三個引數的,supplier 乙個能創造目標型別例項的方法。accumulator 乙個將當元素新增到目標中的方法。combiner 乙個將中間狀態的多個結果整合到一...

ABAP中Collect的用法

簡單來說 collect在非數值字段相同的情況下,起到了數值字段彙總作用。語法 collect w table into i table 舉個簡單的栗子 如下 report ztest no standard page heading.types begin of ty test,id 3 type...

ABAP中COLLECT的用法

要填充內錶 既可逐行 新增資料,也可複製另 乙個 的 內容。要計算數 字字段之和 或要確保內 表中沒有出 現重複條目 請使用 collect 語句,它根 據標準關鍵 字處理行。要在內表 現有行之前 插入新行,請使用 insert 語句。要將內錶 行插入另一 個內錶中,請使用 insert 語句的變式...