在 Java 开发中,我们经常遇到这样的场景:DAO 层返回一个 List(比如 JPA 原生查询或 JDBC 多字段结果集),然后需要将这些行数据转换为业务实体对象。传统做法是显式使用 for 循环配合 ArrayList.add(),看起来直观,但重复代码较多,维护起来也比较繁琐。借助 Stream API 进行重构,可以显著提升代码的可读性和表达力。
以下是一套推荐的重构方案,基于 JDK 17+ 编写,同时也提供了兼容 JDK 8 的写法,方便你根据实际项目环境灵活选用。
✅ 推荐重构版本(JDK 17+)
public ListgetEmployeeList() { return Optional.ofNullable(Dao.getEmpDetailsFromUserMst()) .orElse(Collections.emptyList()) .stream() .map(this::convertToObject) .toList(); // JDK 17 引入,返回不可变列表 } private AddNewSchoolBean convertToObject(Object[] row) { if (row == null || row.length < 3) { throw new IllegalArgumentException("Invalid row data: " + Arrays.toString(row)); } return AddNewSchoolBean.builder() .employeeId(Objects.toString(row[0], "")) .employeeName(Objects.toString(row[1], "")) .schoolName(Objects.toString(row[2], "")) .build(); }
⚠️ 兼容 JDK 8 写法(如需支持旧版本)
只需将最后一行的 .toList() 替换为 .collect(Collectors.toList()) 即可:
// 替换上例最后一行 .collect(Collectors.toList());
