Java 如何在google集合中迭代';多重映射<;?,对象>;?
在使用google collections之前,我有一些类似的代码:Java 如何在google集合中迭代';多重映射<;?,对象>;?,java,generics,collections,guava,Java,Generics,Collections,Guava,在使用google collections之前,我有一些类似的代码: private Set<A> aSet = ...; private Set<B> bSet = ...; public Foo getFoo (Map<?, List<Bar>> bars, Set<?> set) { for (Object item : set) { for (Bar bar : bars.get (item)) {
private Set<A> aSet = ...;
private Set<B> bSet = ...;
public Foo getFoo (Map<?, List<Bar>> bars, Set<?> set) {
for (Object item : set) {
for (Bar bar : bars.get (item)) {
//build foo;
}
}
...
}
private Set aSet=。。。;
私有集bSet=。。。;
公共Foo getFoo(地图集){
用于(对象项:集合){
for(Bar:Bar.get(项目)){
//建富;
}
}
...
}
我可以打这样的电话:
Map<A, List<Bar> aMap = getAMap ();
Foo f1 = getFoo (aMap, aSet);
Map<B, List<Bar> bMap = getBMap ();
Foo f2 = getFoo (bMap, bSet);
地图集){
用于(对象项:集合){
//编译错误:Multimap中的get(捕获#621 of?)无法应用于java.lang.Object
for(Bar:Bar.get(项目)){
//建富;
}
}
...
}
试试这个:
public <T> Foo getFoo (Multimap<T, List<Bar>> bars, Set<T> set) {
for (T item : aSet) {
// compile error: get(capture#621 of ?) in Multimap ... cannot be applied to java.lang.Object
for (Bar bar : bars.get (item)) {
//build foo;
}
}
...
}
对于MultiMap,是:
Collection<V> get(K key)
集合获取(K键)
请确保映射的参数未泛化
MultiMap
更适合于泛型,但Map的设计使其与Java 1.4中以前的Map
具有向后兼容性 试试这个:
public <T> Foo getFoo (Multimap<T, List<Bar>> bars, Set<T> set) {
for (T item : aSet) {
// compile error: get(capture#621 of ?) in Multimap ... cannot be applied to java.lang.Object
for (Bar bar : bars.get (item)) {
//build foo;
}
}
...
}
对于MultiMap,是:
Collection<V> get(K key)
集合获取(K键)
请确保映射的参数未泛化
MultiMap
更适合于泛型,但Map的设计使其与Java 1.4中以前的Map
具有向后兼容性 是的,它起作用了。但是我不清楚为什么我们需要指定?t确保映射的set和key元素来自同一类型multimap必须确保key的类型正确,因为返回的集合是“写入”到multimap本身的。(也就是说,您可以向其中添加一个元素,并且相应的条目会出现在multimap中;如果键的类型错误,我们就会破坏数据)。Map没有这样的问题,使用Object作为get()的参数类型是绝对正确的。是的,它可以工作。但是我不清楚为什么我们需要指定?t确保映射的set和key元素来自同一类型multimap必须确保key的类型正确,因为返回的集合是“写入”到multimap本身的。(也就是说,您可以向其中添加一个元素,并且相应的条目会出现在multimap中;如果键的类型错误,我们就会破坏数据)。Map没有这样的问题,使用Object作为get()的参数类型是绝对正确的。