我有一个 SetMultimap<X> x
我需要对每个 Set<X>
做点什么这张 map 包含(此时我不需要 key )。
我可以打电话x.asMap().values()
, 但不幸的是,此方法返回 Collection<Collection<X>>
.所以当遍历这个时我需要转换每个 Collection<X>
进入 Set<X>
:
SetMultimap<X> x;
for (Collection<X> y : x.asMap().values()) {
foo((Set<X>)y); // foo only takes a Set<X>
}
还有没有这个类型转换吗?当然 SetMultimap
的文档声明此类型转换是安全的,但如果根本不需要类型转换会更好。 SortedSetMultimap
也会出现同样的问题.
最佳答案
a) 您没有理由需要Set
。 Set
没有超出 Collection
指定的方法。你得到的集合是集合,但变量类型不是。使用 Collections,无需强制转换。
b) 如果您确实需要 Set
,或者在 SortedSetMultimap
的情况下需要 SortedSet
,则必须遍历键:
SetMultimap<String,Integer> mmap = Multimaps.newSetMultimap(map, supplier);
for(String key : mmap.keySet()){
Set<Integer> set = mmap.get(key);
}
或
SortedSetMultimap<String,Integer> mmap =
Multimaps.newSortedSetMultimap(map, supplier);
for(String key : mmap.keySet()){
SortedSet<Integer> sortedSet = mmap.get(key);
}
关于java - 如何在没有强制转换的情况下迭代 SetMultimap 中的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5089573/