java - 访问内部流java8中的流对象
问题描述
我有对象列表,其中又包含列表对象。
List<User> users = ....;
List<Roles> roles=....;
我想迭代其中的用户和角色,并且需要将 user.department 与 role.department 列表进行比较。
User 类包含一个角色列表,一个角色包含一个部门列表,并且用户还包含一个部门作为字符串类型。
我的业务逻辑不同,它是这样的。为了便于理解,我以这个为例。
Optional<Role> matchedRole= users
.stream()
.flatMap(u -> u.getRoles().stream())
.filter(r -> r.getDepartmenList().contains(u.getDepartment())
.findFirst();
现在,我如何访问 u 和内部流?提前致谢。
解决方案
您的示例很奇怪,您似乎想在所有用户角色中找到第一个角色,其中包含与该用户相同的部门。我不确定,但如果你想要这个:
Optional<Role> matchedRole = users
.stream().flatMap(u -> u.getRoles()
.stream()
.filter(r -> r.getDepartmentList()
.contains(u.getDepartment())))
.findFirst();
如果您想为每个用户找到这样一个角色,您可以生成 Map 其中,例如,用户名可以是键:
Map<String, Optional<Role>> matchedUserRole = users
.stream()
.collect(Collectors.toMap(User::getName,
u -> u.getRoles()
.stream()
.filter(r -> r.getDepartmentList()
.contains(u.getDepartment()))
.findFirst()));
推荐阅读
- javascript - react-router-dom 与反应挂钩不起作用
- spring-boot - 如何通过 logback.xml 在日志文件中打印 opentracing 'uber-trace-id'?
- java - 如何添加两个对象?
- javascript - collspan 和 rowspan 单元格在表格外浮动后
- python - 在python中查询Split()函数
- google-drive-api - 如何在流中从 Google 的 Report API 获取数据
- python - Python挑战:僵尸
- java - 在java中为什么有这么多的日期和时间处理函数
- nativescript - ValueList Dropdown 中的类型不存在属性“push”
- c# - 带有 lambda 表达式的实体框架中的分层选择