我有两个类型的列表:
class User {
Long userId;
String userName;
Long workflowStatusId;
}
class WorkflowStatus {
Long workflowStatusId;
String workflowStatusName;
Long userId;
}
每个用户对象都有 workflowStatusId。同样,每个 WorkflowStatus 都有与之关联的 userId。我User
首先保存 s,这给了我每个对象的List<User> users
whereworkflowStatusId
设置为 null。现在,对于 users 中的每个用户,我正在制作新条目,WorkflowStatus
其中给我List<WorkflowStatus> workflowStatuses
. 现在我想将这些新插入的对象设置workflowStatusId
在我以前保存的User
对象中,所以我试图匹配userId
两者中的属性,并希望在workflowStatusId
找到匹配项后设置它。我正在尝试做类似的事情:
List<User> filteredList = users
.stream()
.filter(user -> workflowStatuses
.stream()
.allMatch(user.getUserId().equals(workflowStatus.getUserId())))
.map(how to set workflowStatusId in user? can i do something like user->user.setWorkflowStatusId((workflowStatus.getWorkflowStatusId)))
.collect(Collectors.toList());
尝试找到一些解决方案,如果可以使用Java 8 streams
. 基于java 8中的一些共同属性比较不同对象类型的两个列表的更好方法是什么?
在 Stream 中间设置属性等副作用不是一个好主意。更好的解决方案是只创建用户实例的 Map:
Map<Long, User> usersById =
users.stream().collect(Collectors.toMap(User::getUserId, u -> u));
现在您可以简单地遍历您的 WorkflowStatus 对象:
for (WorkflowStatus status : workflowStatuses) {
Long userId = status.getUserId();
Long statusId = status.getWorkflowStatusId();
usersById.get(userId).setWorkflowStatusId(statusId);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句