You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8中如何将List<Object[]>转换为自定义List<EcomDto>并优化代码?

优化Object[]到EcomDto的映射实现

1. 用Java Stream简化循环逻辑

直接通过Stream.map()将每个Object[]转换为EcomDto,再收集为结果列表,替代传统for循环:

import java.util.stream.Collectors;

// ...

List<Object[]> data = getActualData();
List<EcomDto> response = data.stream()
    .map(objArr -> {
        EcomDto dto = new EcomDto();
        // 处理第0位:String类型
        Optional.ofNullable(objArr[0])
            .map(String.class::cast)
            .ifPresent(dto::setZeroIndexData);
        // 处理第1位:Long类型
        Optional.ofNullable(objArr[1])
            .map(Long.class::cast)
            .ifPresent(dto::setFirstIndexData);
        // 处理第2位:自定义枚举
        Optional.ofNullable(objArr[2])
            .map(UserDefinedEnum.class::cast)
            .ifPresent(dto::setSecondIndexData);
        // 补充剩余4个索引的字段赋值逻辑,格式同上
        return dto;
    })
    .collect(Collectors.toList());

2. 抽离映射逻辑,提升代码复用性

把Object[]到EcomDto的转换逻辑抽成单独的静态方法,让Stream调用更简洁,也方便后续维护:

// 抽离的映射方法
private static EcomDto convertToEcomDto(Object[] objArr) {
    EcomDto dto = new EcomDto();
    // 第0位:String
    Optional.ofNullable(objArr[0])
        .map(String.class::cast)
        .ifPresent(dto::setZeroIndexData);
    // 第1位:Long
    Optional.ofNullable(objArr[1])
        .map(Long.class::cast)
        .ifPresent(dto::setFirstIndexData);
    // 第2位:自定义枚举
    Optional.ofNullable(objArr[2])
        .map(UserDefinedEnum.class::cast)
        .ifPresent(dto::setSecondIndexData);
    // 处理剩余4个字段
    return dto;
}

// Stream调用
List<EcomDto> response = data.stream()
    .map(YourCurrentClass::convertToEcomDto)
    .collect(Collectors.toList());

3. 结合Builder模式优化DTO构建

如果你的EcomDto支持Builder模式(比如用Lombok的@Builder注解生成),可以进一步简化代码,让字段赋值更流畅:

// 假设EcomDto已添加@Builder注解
private static EcomDto convertToEcomDto(Object[] objArr) {
    return EcomDto.builder()
        .zeroIndexData(Optional.ofNullable(objArr[0]).map(String.class::cast).orElse(null))
        .firstIndexData(Optional.ofNullable(objArr[1]).map(Long.class::cast).orElse(null))
        .secondIndexData(Optional.ofNullable(objArr[2]).map(UserDefinedEnum.class::cast).orElse(null))
        // 补充剩余字段
        .build();
}

关键优势说明

  • Stream方式:采用声明式编程风格,代码结构更清晰,避免了手动管理集合初始化和循环变量的冗余代码。
  • Optional处理null:替代显式的if(obj[x]!=null)判断,代码更简洁,同时保留了空值安全的处理逻辑。
  • 逻辑抽离:将映射逻辑单独封装,提升了代码的复用性和可维护性,后续修改字段映射只需调整一个方法。

内容的提问来源于stack exchange,提问作者tkz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:47:47