2 回答
TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
為什么要為此使用流?Stream 不是改變對(duì)象的正確工具。
使用標(biāo)準(zhǔn)for循環(huán)。也使代碼更易于理解。
List<Obligation> obligationList = ...;
List<ObligationStatus> statusList = ...;
// For better performance, make a map
Map<String, ObligationStatus> statusMap = new HashMap<>(statusList.size());
for (ObligationStatus status : statusList)
statusMap.put(status.getTopic(), status);
// Assign status values
for (Obligation obligation : obligationList) {
ObligationStatus status = statusMap.get(obligation.getTopic());
if (status != null) {
ob.setStatus(status.getStatus());
ob.setComment(status.getComment());
}
}
如果你想做一些流邏輯,第一部分是一個(gè)很好的選擇:
// For better performance, make a map
Map<String, ObligationStatus> statusMap = statusList.stream()
.collect(Collectors.toMap(ObligationStatus::getTopic, Function.identity()));
更新
注意到問題代碼equalsIgnoreCase(...)在比較topic值時(shí)做了。如果確實(shí)需要,請(qǐng)將 更改HashMap為不區(qū)分大小寫TreeMap:
Map<String, ObligationStatus> statusMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
流版本變得復(fù)雜,所以最好保持舊式。
TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
由于您正在修改現(xiàn)有的List,因此無(wú)需使用collect.
但是,您可以使用單個(gè)forEach. 可以使用和來定位ObligationStatus與實(shí)例匹配的實(shí)例。ObligationfilterfindFirst
obList.stream().forEach(ob -> {
osList.stream()
.filter(os -> ob.getTopic().equalsIgnoreCase(os.getTopic()))
.findFirst()
.ifPresent (os -> {
ob.setStatus(os.getStatus());
ob.setComment(os.getComment());
});
});
添加回答
舉報(bào)
