在Java中,可以使用Stream API的collect(Collectors.toMap())
方法将List转换为Map。以下是几种常见的转换方法:
- 将List中对象的某个属性作为key,其它属性作为value转换为Map:
List<T> list = ...
Map<KeyType, ValueType> map = list.stream()
.collect(Collectors.toMap(T::getKeyMethod, T::getValueMethod));
- 如果List中对象的key可能重复,可以使用
toMap
的重载版本来处理重复的key:
List<T> list = ...
Map<KeyType, ValueType> map = list.stream()
.collect(Collectors.toMap(T::getKeyMethod, T::getValueMethod, (v1, v2) -> v2));
- 如果List中对象的key不会重复,可以使用
toMap
的另一个重载版本,它不允许key重复:
List<T> list = ...
Map<KeyType, ValueType> map = list.stream()
.collect(Collectors.toMap(T::getKeyMethod, T::getValueMethod, (v1, v2) -> {
throw new IllegalStateException("Duplicate key");
}, LinkedHashMap::new));
- 将整个对象作为Map的value,key为对象的某个属性:
List<T> list = ...
Map<KeyType, T> map = list.stream()
.collect(Collectors.toMap(T::getKeyMethod, t -> t));
- 将List转换为Map,其中key和value都是对象本身:
List<T> list = ...
Map<T, T> map = list.stream()
.collect(Collectors.toMap(t -> t, t -> t));
- 使用
Function
来定制key和value的映射:
List<T> list = ...
Map<KeyType, ValueType> map = list.stream()
.collect(Collectors.toMap(
t -> keyFunction.apply(t),
t -> valueFunction.apply(t)));
以上代码中,T
是List中的元素类型,KeyType
和ValueType
分别是转换后Map的key和value的类型。T::getKeyMethod
和T::getValueMethod
是获取对象属性的方法引用。keyFunction
和valueFunction
是自定义的Function
对象。