背景:
在實際業務中,可能需要把資料庫查詢出來資料的某乙個字段(例如: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 語句的變式...