基于java 8中的匹配属性比较两个不同对象类型的列表

莫辛 M

我有两个类型的列表:

class User {
    Long userId;
    String userName;
    Long workflowStatusId;
}

class WorkflowStatus {
    Long workflowStatusId;
    String workflowStatusName;
    Long userId;
}

每个用户对象都有 workflowStatusId。同样,每个 WorkflowStatus 都有与之关联的 userId。User首先保存 s,这给了我每个对象的List<User> userswhereworkflowStatusId设置为 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中的一些共同属性比较不同对象类型的两个列表的更好方法是什么?

VGR

在 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java 8不同对象类型的两个集合的交集

Java 8将BiFunction应用于两个不同对象的列表

比较两个对象列表并通过比较java 8中两个列表的一个属性形成一个新列表

如何基于Java 8中的匹配条件从2个不同的对象列表创建对象列表

比较2个具有不同对象的列表Java返回不匹配的列表

比较不同对象的列表并使用Stream在java8中构建新的对象列表

如何从两个基于键具有不同匹配的对象的 ArrayList 中取出属性

Java从属性比较两个对象列表

基于两个属性从列表中检索多个对象

如何使用Java 8流将两个或更多不同对象列表的值设置为一个对象?

在Java中,如何检查不同对象的两个数组列表中缺少的元素?

如何使用 Java 8 合并两个不同类型的自定义对象列表

Java hashmap-基于不同类型的两个对象的键

高效比较Java中的两个对象列表

基于属性的两个数组之间的不同对象-lodash

为什么 Java == 运算符不能用于非相关类型的两个不同对象?

使用Java流将两个大小相同(类型不同)的列表合并到域对象列表中

合并Java 8中的两个对象列表

Scala/Java:比较两个列表/集合并从两个列表中删除匹配的元素

使用Java8匹配方法比较两个列表

如何基于Javascript中的属性组合两个大小不同的对象数组?

如何重写.equals以基于Java中的2个属性比较2个自定义对象的数组列表

比较两个id属性的列表,仅从list1中删除该对象,而不从list2中删除,然后在Java中合并为单个列表

难道==比较两个基本VS Java中两个对象时实际工作相同或不同?

基于两个属性从数组中删除对象

基于嵌套对象属性的Java 8过滤器列表

Java比较两个列表的对象值?

为什么是比较平等的两个不同java.util.UUID中的对象?

创建基于使用Java 8流常见的情况,从两个不同的名单地图