Java Stream流 List< T >转换Map方法汇总合集(大概是最全吧)
warning:
这篇文章距离上次修改已过442天,其中的内容可能已经有所变动。
在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对象。
评论已关闭