![如何使用 Stream API 将 Object[] 列表转换为对象列表](https://img.php.cn/upload/article/001/246/273/178296709471789.jpg?x-oss-process=image/resize,p_40)
本文详解如何将传统 for 循环处理 object[] 数组列表的方式,重构为简洁、函数式风格的 stream api 实现,涵盖映射转换、异常处理建议及 jdk 版本兼容性注意事项。
本文详解如何将传统 for 循环处理 object[] 数组列表的方式,重构为简洁、函数式风格的 stream api 实现,涵盖映射转换、异常处理建议及 jdk 版本兼容性注意事项。
在 Java 开发中,当 DAO 层返回 List
✅ 推荐重构步骤
- 提取转换逻辑:将 Object[] → AddNewSchoolBean 的映射封装为私有方法,提升复用性与可测试性;
- 消除冗余判断:if (empList.size() != 0) 无必要——空 List 调用 stream() 不会报错,map 也自然跳过;
- 使用 stream().map().collect() 链式调用:替代手动 new ArrayList() 和 add()。
以下是优化后的完整实现(兼容 JDK 17+):
public List<addnewschoolbean> getEmployeeList() {
List<object> empList = Dao.getEmpDetailsFromUserMst();
return empList.stream()
.map(this::convert)
.toList(); // JDK 17+ 推荐,不可变列表
}
private AddNewSchoolBean convert(Object[] obj) {
return AddNewSchoolBean.builder()
.employeeId(Objects.toString(obj[0], ""))
.employeeName(Objects.toString(obj[1], ""))
.schoolName(Objects.toString(obj[2], ""))
.build();
}</object></addnewschoolbean>
⚠️ 注意事项:
- 空值安全:使用 Objects.toString(obj[i], "") 替代 (obj[i]).toString(),避免 NullPointerException;
- JDK 兼容性:若使用 JDK 16 或更低版本,请将 .toList() 替换为 .collect(Collectors.toList());
- 异常处理:原代码中 e.printStackTrace() 不推荐用于生产环境。建议统一捕获并记录日志(如 SLF4J),或抛出自定义业务异常,而非静默吞掉异常;
- 性能考量:Stream 在小数据量下与循环性能差异可忽略,但若需极致性能且数据量极大,可保留传统循环(不过可读性代价较高)。
最终效果:代码行数减少约 40%,逻辑聚焦于“做什么”而非“怎么做”,符合函数式编程思想,也更利于后续扩展(例如增加 .filter() 筛选、.sorted() 排序等)。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











