如何将Multimap <a,b>转换为Iterable <c> </c> </a,b>

时间:2015-04-20 16:41:05

标签: guava

如何将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有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以按如下方式迭代地图。

for(Integer key : map.keySet()) {
  for(String value : map.get(key)) {
  }
}