从Iterable和values函数创建Multimap

时间:2013-12-05 13:54:38

标签: java guava

在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>();
            }
        });

但这似乎不必要地复杂。

1 个答案:

答案 0 :(得分:0)

Multimaps.newListMultimap不允许您传入非空映射。您的实现看起来是正确的方法。

如果您愿意,请提交feature request