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

如何将Iterable<T>类型数据映射为其对应的DTO对象?

解决方案

这里提供4种可直接落地的实现方式,你可以根据自己的项目情况选择:

方式1:JDK原生StreamSupport转流(无额外依赖,推荐)

直接使用JDK java.util.stream 包下的StreamSupport工具类将Iterable转为Stream,不需要引入任何第三方依赖:

import java.util.stream.StreamSupport;
import java.util.stream.Collectors;

// 业务代码
List<PermissionDTO> list = StreamSupport.stream(permissionRepository.findAll().spliterator(), false)
        .map(PermissionDTO::new)
        .collect(Collectors.toList());

参数说明:第二个布尔值代表是否使用并行流,常规业务场景串行false即可。

方式2:重写Repository方法返回值(Spring Data原生支持,写法最简洁)

Spring Data CrudRepository支持在子接口重写父类方法修改返回值类型,你可以直接在PermissionRepository中覆写findAll方法,指定返回List<Permission>:

public interface PermissionRepository extends CrudRepository<Permission, Long>,
        SearchRepository<Permission> {
    // 新增重写方法
    @Override
    List<Permission> findAll();
}

改完后你原来的Stream写法可以直接正常运行,不需要修改业务层逻辑。

方式3:手动遍历转换(写法最直白)

如果你不想用Stream写法,也可以直接遍历Iterable挨个转换:

List<PermissionDTO> dtoList = new ArrayList<>();
for (Permission permission : permissionRepository.findAll()) {
    dtoList.add(new PermissionDTO(permission));
}

方式4:借助Guava工具类转换(项目已引入Guava可选)

如果你的项目已经引入Guava库,可以先把Iterable转为List再处理:

import com.google.common.collect.Lists;

List<PermissionDTO> list = Lists.newArrayList(permissionRepository.findAll())
        .stream()
        .map(PermissionDTO::new)
        .collect(Collectors.toList());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:24:03