3 回答

TA貢獻1796條經驗 獲得超4個贊
您的flatMap(在評論中建議)將產生一個Stream<Salary>,這將不允許您修改相應的Account實例。
您可以創建一個Streamof Accounts 及其相應的并在其上Salary運行:forEachStream
accounts.stream()
.flatMap(a->salaries.stream()
.filter(s -> s.getID().equals(a.getID())
.map(s -> new SimpleEntry<Account,Salary)(a,s)))
.forEach(e -> e.getKey().setxxxx(e.getValue().getxxxx()));

TA貢獻1775條經驗 獲得超11個贊
最后的操作,obj1.setxxxx(obj2.getxxxx());需要同時擁有obj1和obj2。指示從兩個列表流式傳輸的項目
list1.stream()
.forEach(obj1 ->
list2.stream()
.filter(obj2 -> obj1.getId().equals(obj2.getId()))
.findFirst()
.ifPresent(obj2 -> obj1.setxxxx(obj2.getxxxx()))
);

TA貢獻1804條經驗 獲得超3個贊
我總是建議創建一個地圖,因為查找成本會降低并且它會變得更具可讀性。
Map<String, List<Salary>> salaryById = salaries.stream().collect(Collectors.groupingBy(Salary::getId));
accounts.forEach(a -> CollectionUtils.emptyIfNull(salaryById.get(a.getId())).forEach(s -> s.setxxxx(..)));
如果 Account Salary <-> Account 是一對一,您將分組更改為Collectors.toMap(..)
添加回答
舉報