如何使用Java Stream将List<Student>转换为List<Map>
实现List到List
当然可以实现!这在Java开发里是非常常见的转换需求,我给你分享两种实用的方案,你可以根据自己的Java版本和项目场景来选择:
1. 传统循环方式(兼容所有Java版本)
这种方式逻辑直观,不管你用的是Java 7还是更早的版本都能正常运行:
// 假设你已经有了Student列表 List<Student> studentList = new ArrayList<>(); // 初始化studentList... List<Map<String, String>> studentMapList = new ArrayList<>(); for (Student student : studentList) { Map<String, String> studentMap = new HashMap<>(); // 调用Student类已有的getName()方法获取姓名 studentMap.put("name", student.getName()); // 注意:你的Student类中age没有提供getter方法,如果是同包或子类可以直接访问成员变量 // 实际项目中建议补充getAge()方法,更符合封装原则 studentMap.put("age", student.age); studentMapList.add(studentMap); }
这种方法的优势是兼容性拉满,新手也能快速理解代码逻辑。
2. Java 8+ Stream API方式(更简洁优雅)
如果你使用的是Java 8及以上版本,用Stream API可以写出更简洁的代码:
List<Student> studentList = ...; // 你的学生列表 List<Map<String, String>> studentMapList = studentList.stream() .map(student -> { Map<String, String> map = new HashMap<>(); map.put("name", student.getName()); map.put("age", student.age); // 同样注意age的访问权限问题 return map; }) .collect(Collectors.toList());
要是你用的是Java 9及以上,还可以用Map.of()进一步简化代码(生成的是不可变Map):
List<Map<String, String>> studentMapList = studentList.stream() .map(student -> Map.of( "name", student.getName(), "age", student.age )) .collect(Collectors.toList());
小提示
你的Student类中age字段没有提供getter方法,在实际项目中建议补充public String getAge() { return age; },这样既符合面向对象的封装原则,也能避免访问权限带来的问题(比如跨包访问时无法直接读取成员变量)。
内容的提问来源于stack exchange,提问作者John Lennon
相关产品推荐
相关产品推荐

