gpt4 book ai didi

Java 8 流 : Combine properties of two objects which are in ArrayLists into an ArrayList of a third object type

转载 作者:行者123 更新时间:2023-12-02 04:55:15 25 4
gpt4 key购买 nike

我是 Java 8 流的新手,希望能在学习方面得到一些帮助。

我有一个 User 对象的 Arraylist 和 UserCompany 对象的 Arraylist。 User 对象具有 user_id 和关联的用户信息 UserCompany 列表具有用户的 Company 对象,但仅具有用户的 user_id。 我想创建第三个名为 UserCompanyView 的对象,它是使用 Java 8 流的 User 对象和 Company 对象的组合。 我只能找到两个数组连接或合并的示例,例如:

 Stream.of(list1, list2)
.flatMap(x -> x.stream())
.collect(Collectors.toList());

但没有使用各个列表的特定属性来创建第三个对象。

代码应该:

1) 迭代 UserCompany 列表

2)检查UserCompany user_id是否与用户列表user_id匹配

3) 如果 2 为 true ,则使用 User 和 UserCompany 创建一个 UserCompanyView 对象

4) 将 3 中的 UserCompanyView 添加到新的 List 中并返回它。

感谢您查看这篇文章并花时间回复

最佳答案

如果它们不遵循相同的顺序,您需要先创建一个 ID 映射:

Map<Integer, User> usersById = users.stream()
.collect(Collectors.toMap(User::getUserId, u -> u));

现在您可以流式传输另一个列表,并通过 ID 将每个元素映射到其匹配的 User:

List<UserCompanyView> views = userCompanies.stream()
.map(uc -> new UserCompanyView(usersById.get(uc.getUserId()), uc))
.collect(Collectors.toList())

如果有 UserCompany 没有匹配 User,您可以通过在 map() 之前添加以下内容来过滤掉它们:

.filter(uc -> usersById.containsKey(uc.getUserId()))

关于Java 8 流 : Combine properties of two objects which are in ArrayLists into an ArrayList of a third object type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52432643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com