我有SetMultimap<X> x
,我需要对此地图包含的每个Set<X>
执行一些操作(此时我不需要密钥)。
我可以致电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
会出现同样的问题。
答案 0 :(得分:2)
a)您没有理由需要Set
。 Set
没有Collection
指定的方法。你得到的集合是集合,但变量类型不是。使用集合,无需进行投射。
b)如果您确实需要Set
,或SortedSet
SortedSetMultimap
,则必须迭代密钥:
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);
}
答案 1 :(得分:1)
我可以想到一个更好的解决方案,但效率不高(但没有演员表)。
for (K k : x.keySet()) {
Set<X> a = x.get(k);
}