【问题标题】:Accessing stream object in inner stream java8访问内部流java8中的流对象
【发布时间】:2021-04-15 09:25:25
【问题描述】:

我有对象列表,其中又包含列表对象。

List<User> users = ....;

List<Roles> roles=....;

我想遍历其中的用户和角色,并且需要将 user.department 与 role.department 列表进行比较。

User 类包含一个 Roles 列表,一个 Role 包含一个 Departments 列表,并且 User 还包含一个 Department 作为 String 类型。

我的业务逻辑不同,是这样的。为了便于理解,我以这个为例。

Optional<Role> matchedRole= users
      .stream()
      .flatMap(u -> u.getRoles().stream())
      .filter(r -> r.getDepartmenList().contains(u.getDepartment())
      .findFirst();

现在,我如何访问 u 和内部流? 提前致谢。

【问题讨论】:

  • 所以你的User 类包含Roles 的列表,而Role 包含Departments 的列表?而User 还包含一个Department?
  • 这是正确的@MCEmperor,更新问题以供其他人理解。谢谢!!
  • 你的例子能编译吗?在 u.getDepartment() id u 参数可访问?我不明白你想找到什么?
  • @SergeyAfinogenov 这无法编译,是的,U 不可访问,我的问题是如何访问它。基本上,我想要与用户部门相同的角色。

标签: java java-8 java-stream


【解决方案1】:

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

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

【讨论】:

  • 基本上,我想要和用户所在部门相同的角色
  • 我认为这实现了你想要做的,不是吗?
  • 你想为每个用户只获取一个角色还是所有这些角色?@ULLAS K
  • 每个用户只有一个角色。用户可以拥有一个与其部门匹配的角色
  • 你应该在你的问题中写下这个。在这种情况下,我的解决方案不正确,因为它仅从所有用户角色@ULLAS K 中搜索一个角色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 2015-08-26
  • 1970-01-01
  • 2016-07-07
  • 2019-01-03
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多