我有这个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/