- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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/
我是一名优秀的程序员,十分优秀!