在Guava中,有没有办法从Multimap
键和Iterable
创建一个Function
来返回该键的值?我正在寻找具有此签名的东西(加上泛型中的一些超级/扩展):
<E, T> Multimap<E, T> create(final Iterable<E> inKeys,
final Function<E, Iterable<T>> inValuesFunction);
我已经提出了我自己的实现,这并不太难,但似乎在Guava中应该有这样的东西。这是我的实施:
<E, T> Multimap<E, T> create(final Iterable<E> inKeys, final Function<E, Iterable<T>> inValuesFunction) {
ImmutableMultimap.Builder<E, T> builder = ImmutableMultimap.builder();
for (E key : inKeys) {
Iterable<T> values = inValuesFunction.apply(key);
builder.putAll(key, values);
}
return builder.build();
}
看起来可能有这样的事情:
Multimaps.newListMultimap(FluentIterable.from(inKeys)
.toMap(valuesFunction),
new Supplier<List<T>>() {
@Override
public List<T> get() {
return new ArrayList<T>();
}
});
但这似乎不必要地复杂。