[英]How can I do multiple chained operations in java-8?
我有一個如下用例。
List<Document>
對於每個Document
獲取一個字段
添加到集合
更改字段
對照其他兩組檢查更改的字段
如果不存在轉換為 pojo
將 pojo 添加到列表中
我有如下的東西。
Optional.ofNullable(documentList).orElseGet(Collections::emptyList).forEach(doc -> {
// I am doing all the operations in java7 way
})
我想到了類似下面的東西。
field
- 然后從原始文檔形成 pojo - 將 pojo 添加到列表但在這里我需要迭代兩次。 此外,我還需要維護我的原始文檔。 如果我的列表很大,則不必要地增加迭代時間。
我怎樣才能以標准方式做到這一點?
documentList.forEach(doc -> {
String deviceId = doc.getString("deviceId");
deviceSet.add(deviceId);
String alteredId = "IMEI" + deviceId;
if(!clearedDevices.contains(alteredId) && !superSetDevices.contains(deviceId)) {
//Pojo from Document
//add pojo to a list
}
})
好吧,這取決於相關字段的類型。 如果是可變的 object,那么 Java 8 stream 是完美的。 就像是:
documentList.stream()
.map(d->d.getString("deviceId") // stream of Stringified field
.peek(deviceSet::add) // add field to set
.map("IMEI"::concat) // alter the field
.filter(mf->!clearedDevices.contains(mf)&&!superSetDevices.contains(mf)) // filter...
.map(f->XXX.convert2Pojo(f)) // convert to pojo
.forEach(pojoList::add) // add to pojolist, or collect?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.