java - 如何在没有强制转换的情况下迭代 SetMultimap 中的集合?

标签 java guava

我有一个 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) 您没有理由需要SetSet 没有超出 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/

相关文章:

java - hashMap的HashMap

java - 如何将大数从一种基数转换为另一种基数

java - Guava 先决条件的自定义异常

java - Google Guava getTopLevelClasses 返回空集

java - 使用对象和接口(interface)从 Map 对象获取 key

java - 如何利用可选的 lambda 表达式

java - 具有相同输出的断言失败错误

java - 即使值始终相同,参数化您的PreparedStatement是否更好?

java - 使用 Java StAX 解析 XML - 计算内容标签的数量

java - android 中的可用字体(来自 context.getAssets() )java