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(..)
添加回答
举报