首页 > 解决方案 > 访问内部流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 和内部流?提前致谢。

标签: javajava-8java-stream

解决方案


您的示例很奇怪,您似乎想在所有用户角色中找到第一个角色,其中包含与该用户相同的部门。我不确定,但如果你想要这个:

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()));

推荐阅读