簡體   English   中英

如何在 java-8 中進行多個鏈式操作?

[英]How can I do multiple chained operations in java-8?

我有一個如下用例。

  1. 來自 mongo 的List<Document>
  2. 對於每個Document

    1. 獲取一個字段

    2. 添加到集合

    3. 更改字段

    4. 對照其他兩組檢查更改的字段

      1. 如果不存在轉換為 pojo

      2. 將 pojo 添加到列表中

我有如下的東西。

Optional.ofNullable(documentList).orElseGet(Collections::emptyList).forEach(doc -> {
      // I am doing all the operations in java7 way
})

我想到了類似下面的東西。

  1. 迭代文檔列表 - 將字段添加到集合
  2. 從第 1 步迭代集合 - 檢查其他兩個 collections 上不包含的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM