如何将Multimap<A,B>
转换为Iterable<C>
,其中C(Iterable<B> iterableB)
?
例如。
Iterable<String> names
= [&#34; Alice&#34;,&#34; Anna&#34;,&#34; Ben&#34;,&#34; Chris&#34;,&#34;查理&#34;]
Multimap<Integer,String> namesStartWith
= {[1,[&#34; Alice&#34;,&#34; Anna&#34;]],[2,[&#34; Ben&#34;]],[ 3,[&#34;克里斯&#34;,&#34;查理&#34;]]}
对于名称的每个Entry<Integer , List<String>>
转换。
ImmutableListMultimap<Integer, String> example = Multimaps.index(newArrayList("Alice", "Anna", "Ben", "Chris", "Charlie"), new Function<String, Integer>() {
@Override
public Integer apply(String input) {
return input.startsWith("A") ? 1 : input.startsWith("B") ? 2 : 3;
}
});
List<Names> names = newArrayList();
for (Integer number : example.keys()) {
names.add(new Names(number,example.get(number)));
}
return names;
private class Names {
int startWith;
List<String> names;
public Names(int startWith, List<String> names) {
this.startWith = startWith;
this.names = names;
}
}
使用Guava有更简单的方法吗?
答案 0 :(得分:1)
您可以按如下方式迭代地图。
for(Integer key : map.keySet()) {
for(String value : map.get(key)) {
}
}