java - 在 Java 中从 Map(具有唯一元素的 Set)获取

标签 java dictionary set

我有这个Map<String, Set<String>> :

{upload=[ADMIN], configure.accounts=[ADMIN, CONSULT], consult=[ADMIN, CONSULT], configure.merchants=[MANAGER, ADMIN], configure.invoices=[MANAGER, ADMIN], graphics=[MANAGER, ADMIN]}

我想获得一个结构Set<String>就像下一个:

[ADMIN, CONSULT, MANAGER]

数据被过滤,从 map 内的集合中获取所有可能的值。如果我迭代整个 Map 并比较值,添加当前不在 Set 中的值,我就可以做到这一点。 .

有什么函数可以做到这一点吗?

最佳答案

您不必检查各个值是否已在集合中——集合会处理这个问题,这就是集合的用途。只需迭代这些值并将它们添加到所有值的集合中即可。

Map<String, Set<String>> data = new HashMap<>();
data.put("accounts", new HashSet<>(Arrays.asList("ADMIN", "CONSULT")));
data.put("merchants", new HashSet<>(Arrays.asList("MANAGER", "ADMIN")));

Set<String> values = new HashSet<>();
for (Set<String> set : data.values()) {
    values.addAll(set);
}

如果您使用的是 Java 8,还可以将 for 循环替换为 foreach 语句:

data.values().forEach(values::addAll);

之后,[MANAGER、ADMIN、CONSULT]

关于java - 在 Java 中从 Map(具有唯一元素的 Set)获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38511024/

相关文章:

java - 如何启动具有标准 bash shell 环境的 java 进程?

java - 如何在 Asynctask 中修改 Google Maps v2 标记的 fragment 文本?

python - 字典不识别浮点键

c++ - c++ 容器 "set"如何定义两个相等的键?

python - 如何在Python中执行以下有序子集元素测试?

java - 正则表达式查找分隔符之间包含的字符串

java - 用 Java 编写单元测试文件,无需接口(interface)包装器

python - 如何保留 python 字典中的项目?

java - 将对象属性映射到 Java 映射的最简单方法

c++ - std::set< struct > 按 struct c++ 中的属性值排序