【发布时间】:2015-04-20 16:41:04
【问题描述】:
如何将Multimap<A,B> 转换为Iterable<C>,其中C(Iterable<B> iterableB)?
例如。
Iterable<String> names = [“爱丽丝”、“安娜”、“本”、“克里斯”、“查理”]
Multimap<Integer,String> namesStartWith = { [1, ["Alice", "Anna"]], [2, ["Ben"]], [3,["Chris", "Charlie"]] }
对于每个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 做到这一点?
【问题讨论】:
-
你能澄清一下这个问题吗?
-
@mota 这个问题非常模棱两可。请参考guidelines
-
听起来你已经有了答案。没有一个明确更好的答案,尽管它可能有助于迭代
asMap().entrySet()。
标签: guava