Java中List转Map的几种方式
在Java中,可以使用Java 8引入的Stream API将List转换为Map。以下是几种常见的方法:
- 使用
Collectors.toMap
方法,当List中的对象具有唯一的键值时,可以使用此方法。
List<Item> list = new ArrayList<>();
// 假设Item有id和name两个属性
Map<Integer, Item> map = list.stream()
.collect(Collectors.toMap(Item::getId, item -> item));
- 如果List中的对象不唯一,并且想要合并值,可以使用重载的
toMap
方法,提供合并函数。
List<Item> list = new ArrayList<>();
Map<Integer, String> map = list.stream()
.collect(Collectors.toMap(Item::getId, Item::getName, (v1, v2) -> v1 + "," + v2));
- 使用
groupingBy
收集器进行分组,得到的Map的值将是一个List。
List<Item> list = new ArrayList<>();
Map<Integer, List<Item>> map = list.stream()
.collect(Collectors.groupingBy(Item::getId));
确保在使用toMap
时List中的键不能重复,否则会抛出IllegalStateException
。如果可能存在重复的键,可以使用第二种方法来合并值。
评论已关闭