有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在java8中执行多个链式操作?

我有一个用例如下

  1. ^来自mongo的{}
  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中的集合-检查其他两个集合中的fieldnot contains-然后从原始文档中形成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
         }
    })

共 (1) 个答案

  1. # 1 楼答案

    这取决于相关领域的类型。如果它是一个可变对象,那么Java8流就是完美的。比如:

    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?