首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java8Streams:将ArrayLists中的两个对象的属性组合成第三个对象类型的ArrayList

Java8Streams:将ArrayLists中的两个对象的属性组合成第三个对象类型的ArrayList
EN

Stack Overflow用户
提问于 2018-09-21 04:14:42
回答 2查看 2.3K关注 0票数 3

我是Java 8 streams的新手,希望能对我的学习有所帮助。

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

代码语言:javascript
复制
 Stream.of(list1, list2)
.flatMap(x -> x.stream())
.collect(Collectors.toList());

而不是使用各个列表的特定属性来创建第三个对象。

代码应该是:

1)遍历UserCompany列表

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

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

4)将3中的UserCompanyView添加到新列表中并返回。

感谢你阅读这篇文章并花时间回复

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-21 04:29:45

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

代码语言:javascript
复制
Map<Integer, User> usersById = users.stream()
        .collect(Collectors.toMap(User::getUserId, u -> u));

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

代码语言:javascript
复制
List<UserCompanyView> views = userCompanies.stream()
        .map(uc -> new UserCompanyView(usersById.get(uc.getUserId()), uc))
        .collect(Collectors.toList())

如果存在不匹配UserUserCompany,则可以通过在map()之前添加以下内容来过滤掉它们

代码语言:javascript
复制
.filter(uc -> usersById.containsKey(uc.getUserId()))
票数 3
EN

Stack Overflow用户

发布于 2018-09-21 04:28:47

为了让它执行,首先要构建一个user_id to User对象的Map

使用streams,你可以这样做:

代码语言:javascript
复制
List<User> users = // built elsewhere

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

然后迭代和UserCompany对象,查找User对象,创建UserCompanyView对象,将它们添加到List中。

使用streams,你可以这样做:

代码语言:javascript
复制
List<UserCompany> userCompanies = // built elsewhere

List<UserCompanyView> views = userCompanies.stream()
        .map(uc -> new UserCompanyView(userById.get(uc.getUserId()), uc))
        .collect(Collectors.toList());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52432643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档