在 Java 中,将List
转换为Map
是常见操作,通常需要指定Map
的键(Key)和值(Value),常用工具类有Java 8 Stream API
一 Java8 Stream API
package list2map;import java.util.*;
import java.util.stream.Collectors;// 定义实体类
class User {private Long id;private String name;// 构造函数、getter、setter省略public User(Long id, String name) {this.id = id;this.name = name;}public Long getId() { return id; }public String getName() { return name; }
}public class ListToMapExample {public static void main(String[] args) {// 准备List数据List<User> userList = List.of(new User(1L, "Alice"),new User(2L, "Bob"),
// new User(1L, "Bob"),如果两个id都是1,那么Bob会覆盖Alicenew User(3L, "Charlie"));// 转换为Map<id, User>Map<Long, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, // 键:User对象的iduser -> user, // 值:User对象本身(oldValue,newValue) -> newValue, //冲突时取新值TreeMap::new //指定Map的实现类));//Map集合的遍历Set<Map.Entry<Long, User>> entries = userMap.entrySet();for (Map.Entry<Long, User> entry : entries) {System.out.println("entry.getKey() = " + entry.getKey());System.out.println("entry.getValue() = " + entry.getValue().getName());}}
}
二 传统方式
import java.util.HashMap;
import java.util.Map;Map<Long, User> userMap = new HashMap<>();
for (User user : userList) {userMap.put(user.getId(), user); // 手动put键值对
}
三 总结
- 推荐方式:使用
Stream.collect(Collectors.toMap())
,代码简洁且支持灵活配置。 - 核心要素:明确键(Key)、值(Value)的提取规则,处理可能的重复键冲突。
- 扩展场景:可根据需求转换为不同的
Map
实现类,或只保留对象的部分属性作为值。