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

如何使用Java 8从List<Object[]>中获取数据(替代迭代)

Java 8 实现 List<Object[]> 转 List

首先你需要定义对应的MyDto类,假设它包含firstName、lastName、address三个字段,示例代码如下:

public class MyDto {
    private String firstName;
    private String lastName;
    private String address;

    // 方案一:带参构造方法
    public MyDto(String firstName, String lastName, String address) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.address = address;
    }

    // 方案二:无参构造+Setter方法
    public MyDto() {}

    public void setFirstName(String firstName) { this.firstName = firstName; }
    public void setLastName(String lastName) { this.lastName = lastName; }
    public void setAddress(String address) { this.address = address; }

    // 可选:toString方法方便调试输出
    @Override
    public String toString() {
        return "MyDto{" +
                "firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

接下来用Java 8的Stream API替代传统迭代写法,有几种常见实现方式:

方式一:使用带参构造方法直接映射

利用Stream.map()将每个Object[]转换为MyDto,最后通过Collectors.toList()收集为目标列表:

List<Object[]> objects = query.list();
List<MyDto> dtoList = objects.stream()
        // 注意类型转换,确保Object[]元素类型与Dto字段匹配
        .map(obj -> new MyDto((String) obj[0], (String) obj[1], (String) obj[2]))
        .collect(Collectors.toList());

方式二:使用无参构造+Setter方法

如果MyDto只有无参构造,可在map()的lambda表达式中完成属性赋值:

List<MyDto> dtoList = objects.stream()
        .map(obj -> {
            MyDto dto = new MyDto();
            dto.setFirstName((String) obj[0]);
            dto.setLastName((String) obj[1]);
            dto.setAddress((String) obj[2]);
            return dto;
        })
        .collect(Collectors.toList());

方式三:提取转换方法,提升代码可读性

如果转换逻辑复杂,可单独提取一个转换方法,再通过方法引用简化代码:

// 单独的转换方法
private MyDto convertToDto(Object[] obj) {
    MyDto dto = new MyDto();
    dto.setFirstName((String) obj[0]);
    dto.setLastName((String) obj[1]);
    dto.setAddress((String) obj[2]);
    return dto;
}

// 调用示例
List<MyDto> dtoList = objects.stream()
        .map(this::convertToDto)
        .collect(Collectors.toList());

注意事项

  • 确保Object[]中元素的类型与MyDto字段类型一致,避免ClassCastException;
  • 确认查询结果的列顺序与你映射的字段顺序完全匹配,否则会出现属性值错位;
  • 如果存在null值,可根据业务需求添加默认值处理(例如obj[0] == null ? "" : (String) obj[0])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:44:59