我找不到一个方法在番石榴转换一个集合(或迭代器/迭代)到一个地图,类似于以下(通配符为清楚省略省略):
public static <T,K,V> Map<K,V> collectionSplitter(Collection<T> source,Function<T,K> kProducer,V> vProducer){ Map<K,V> map = Maps.newHashMap(); for(T t : source){ map.put(kProducer.apply(t),vProducer.apply(t)); } return map; }
有没有现有的方法呢?最接近的是Splitter.keyValueSplitter(),如果T是一个String.
解决方法
我最了解的是
Maps.uniqueIndex
– 这是关键方面,但不是价值方面…足够近了吗?
你可以使用:
Map<K,V> map = Maps.transformValues(Maps.uniqueIndex(source,kProducer),vProducer);
稍微尴尬,但它会完成工作,我想…