如何将ArrayList<StudentBean>数据添加/替换到HashMap<Integer, StudentBean>中?
问题修复与实现方案
你的代码有几个明显错误,导致无法正常运行:
- 遍历逻辑完全错误:
resultList是List集合,不能直接遍历Map.Entry,而且resultList.size()是整数,根本没法用在for-each循环的遍历目标里 - Put参数错误:
orginialStudentDetails.put()的第二个参数应该是单个StudentBean对象,而不是整个resultList - 键的获取方式错误:你试图从
entry.getKey()拿Map的键,但你根本没遍历Map的条目,应该从每个StudentBean实例中调用getStudentId()获取键
正确的实现方式
方式1:增强for循环(最直观,兼容所有Java版本)
直接遍历resultList中的每个学生对象,用StudentId作为Map的键,将对象存入Map——Map的put方法会自动处理:如果键已存在就替换对应的值,不存在则新增条目。
for (StudentBean student : resultList) { orginialStudentDetails.put(student.getStudentId(), student); }
方式2:Java 8+ Stream流(更简洁的写法)
利用Stream API将List转换为Map,然后通过putAll合并到原Map中,第三个参数指定键重复时用新值覆盖旧值:
orginialStudentDetails.putAll( resultList.stream() .collect(Collectors.toMap( StudentBean::getStudentId, // 提取StudentId作为Map的键 student -> student, // 用学生对象本身作为值 (oldVal, newVal) -> newVal // 键重复时,新值替换旧值 )) );
方式3:传统索引式for循环(适合Java 8之前的版本)
如果你的项目使用Java 8及更早的版本,可以用索引遍历List:
for (int i = 0; i < resultList.size(); i++) { StudentBean student = resultList.get(i); orginialStudentDetails.put(student.getStudentId(), student); }
以上三种方式都能实现你的需求:把resultList中的所有学生数据,以StudentId为键,添加或替换到orginialStudentDetails这个Map集合中。
内容的提问来源于stack exchange,提问作者Ranyk
相关产品推荐
相关产品推荐

