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
相关产品推荐
相关产品推荐

