【问题标题】:Grouping users by privilege using Stream API使用 Stream API 按权限对用户进行分组
【发布时间】:2019-03-13 15:03:09
【问题描述】:

我有一个任务:给定一个用户列表,每个用户都有一些特权,按特权对用户进行分组。我应该使用流 API。这是我想到的唯一代码:

public Map<Privilege, List<User>> groupByPrivileges(List<User> users) {
    return users.stream().collect(groupingBy(User::getPrivileges));
}

正如您在方法的返回类型中看到的那样,我需要获取一个以单个 Privilege 对象作为键的映射,但是如果用户具有多个权限,则可能会在不同的键下多次出现。

主要问题是User::getPrivileges返回List&lt;Privilege&gt;,而我只知道如何处理单个Privilege。

【问题讨论】:

  • 你需要什么?
  • 但这不是我需要的 - 不幸的是,我们不在读心术领域。
  • 您缺少括号,它应该是 Collectors.groupingBy,除非您有 static 导入。修复这两件事使它可以为我编译
  • @GBlodgett,对不起,如果我不清楚,我需要“按权限对用户进行分组”。它在我的任务描述中指定。
  • 然后edit问题并添加这些信息......

标签: java java-8 java-stream grouping


【解决方案1】:

您可以为列表中的每个权限创建一个条目,然后在您收集时按以下方式分组:

public Map<Privilege, List<User>> groupByPrivileges(List<User> users) {
    return users.stream()
            .flatMap(user -> user.getPrivileges().stream()
                    .map(privilege -> new AbstractMap.SimpleEntry<>(privilege, user)))
            .collect(Collectors.groupingBy(Map.Entry::getKey,
                    Collectors.mapping(Map.Entry::getValue, Collectors.toList())));
}

【讨论】:

    猜你喜欢
    • 2020-01-08
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多