Java中List转换成Map的两种实现方式
作者:我需要打球
Java中List转Map常用Stream API,通过collect(Collectors.toMap())实现,需明确键值规则并处理重复键冲突,支持灵活扩展
在 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会覆盖Alice
new User(3L, "Charlie")
);
// 转换为Map<id, User>
Map<Long, User> userMap = userList.stream()
.collect(Collectors.toMap(
User::getId, // 键:User对象的id
user -> 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实现类,或只保留对象的部分属性作为值。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
