首页 > 编程语言 >使用Stream API将Object[]列表转为对象集合

使用Stream API将Object[]列表转为对象集合

来源:互联网 2026-07-02 08:09:01

在 Java 开发中,DAO 层返回 List(如 JPA 原生查询或 JDBC 多字段结果集)后,将其映射为业务实体对象是常见需求。传统写法依赖显式 for 循环和 ArrayList.add(),虽然直观,但长期维护会发现代码冗余且难以扩展。通过 Stream API 重构,能显著提升代码可读性

在 Java 开发中,DAO 层返回 List(如 JPA 原生查询或 JDBC 多字段结果集)后,将其映射为业务实体对象是常见需求。传统写法依赖显式 for 循环和 ArrayList.add(),虽然直观,但长期维护会发现代码冗余且难以扩展。通过 Stream API 重构,能显著提升代码可读性与表达力。

以下是一套推荐的重构方案,基于 JDK 17+ 编写,并提供兼容 JDK 8 的写法,便于根据实际环境灵活选用。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

推荐重构版本(JDK 17+)

public List getEmployeeList() {
    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());

关键优化说明

  • 空安全增强:使用 Optional.ofNullable(...).orElse(...) 替代容易出错的 empList.size() != 0 判断,从源头杜绝 NullPointerException。
  • 健壮性提升:在 convertToObject 方法中主动校验数组长度和元素是否为空,配合 Objects.toString() 安全处理 null 字段,即使字段为空也不会导致崩溃。
  • 职责分离:将转换逻辑抽取为独立私有方法,符合单一职责原则,便于后期测试或复用。
  • 不可变返回:JDK 17 的 .toList() 返回不可修改列表,防止下游误改数据引发并发或一致性问题。如需可变列表,可额外包裹 new ArrayList<>(...)

注意事项

  • 确保 Dao.getEmpDetailsFromUserMst() 返回的 Object[] 中各索引位置语义稳定,例如 [0] 为 id,[1] 为 name,[2] 为 schoolName;顺序变化会导致映射错误。
  • 若 DAO 可能返回 null,必须进行空检查(上述方案已通过 Optional 处理)。直接对 null 列表调用 .stream() 会抛出 NullPointerException。
  • Stream 本身不处理异常——若 convertToObject 可能抛出受检异常,需将其包装为运行时异常,或自定义 Function 处理。

使用 Stream API 重构后,代码行数可减少约 40%,逻辑更聚焦于“数据转化”本身,可测试性和可维护性显著提升。当然,具体选用哪种方式,还需根据项目 JDK 版本和团队风格决定——但这套方案提供了一个清晰、稳健的参考方向。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。