最近,我和一位同事讨论了在Java中将List转换为Map的最佳方法,以及这样做是否有任何具体的好处。
我想知道最佳的转换方法,如果有人能指导我,我将非常感激。
这是一个好方法吗?
List<Object[]> results;
Map<Integer, String> resultsMap = new HashMap<Integer, String>();
for (Object[] o : results) {
resultsMap.put((Integer) o[0], (String) o[1]);
}
就像已经说过的,在java-8中,我们有收藏家的简洁解决方案:
list.stream().collect(
groupingBy(Item::getKey)
)
同时,你可以通过另一个groupingBy方法作为第二个参数来嵌套多个组:
list.stream().collect(
groupingBy(Item::getKey, groupingBy(Item::getOtherKey))
)
这样,我们就有了多级映射,就像这样:map <key, map <key, List<Item>>>
普遍的方法
public static <K, V> Map<K, V> listAsMap(Collection<V> sourceList, ListToMapConverter<K, V> converter) {
Map<K, V> newMap = new HashMap<K, V>();
for (V item : sourceList) {
newMap.put( converter.getKey(item), item );
}
return newMap;
}
public static interface ListToMapConverter<K, V> {
public K getKey(V item);
}