如何在 java-8 中执行多个链式操作?
How can I do multiple chained operations in java-8?
我有一个用例如下。
List<Document>
来自 mongo
每个Document
获取字段
加入集合
修改字段
对照另外两组检查更改的字段
如果不存在则转换为 pojo
将 pojo 添加到列表
我有如下内容。
Optional.ofNullable(documentList).orElseGet(Collections::emptyList).forEach(doc -> {
// I am doing all the operations in java7 way
})
我的想法与下面类似。
- 迭代文档列表 - 将字段添加到集合中
- 迭代步骤 1 中的集合 - 检查
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
}
})
嗯,这取决于相关字段的类型。如果是可变对象,那么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?
我有一个用例如下。
List<Document>
来自 mongo每个
Document
获取字段
加入集合
修改字段
对照另外两组检查更改的字段
如果不存在则转换为 pojo
将 pojo 添加到列表
我有如下内容。
Optional.ofNullable(documentList).orElseGet(Collections::emptyList).forEach(doc -> {
// I am doing all the operations in java7 way
})
我的想法与下面类似。
- 迭代文档列表 - 将字段添加到集合中
- 迭代步骤 1 中的集合 - 检查
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
}
})
嗯,这取决于相关字段的类型。如果是可变对象,那么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?