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

如何将Java ENUM转换为指定DTO并使用Stream流优化转换代码

问题原因

  • TicketStatus.values() 返回的是枚举对象数组,不是Map结构,没有entrySet()方法,所以你之前的流式写法会编译报错
  • 你原有for循环的传参有误,第二个参数错传了getShortName(),不符合name字段对应fullName的映射规则

正确Stream实现

直接用Arrays.stream()把枚举数组转为流处理即可:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

// 转换逻辑
List<TicketStatusTypesDTO> list = Arrays.stream(TicketStatus.values())
        .map(ticketStatus -> new TicketStatusTypesDTO(
                ticketStatus.getShortName(),
                ticketStatus.getFullName()
        ))
        .collect(Collectors.toList());

如果想用DTO的Builder写法可读性更高:

List<TicketStatusTypesDTO> list = Arrays.stream(TicketStatus.values())
        .map(ticketStatus -> TicketStatusTypesDTO.builder()
                .code(ticketStatus.getShortName())
                .name(ticketStatus.getFullName())
                .build())
        .collect(Collectors.toList());

扩展优化(可选)

可以直接把转换逻辑封装为枚举的静态方法,后续调用更方便:

public enum TicketStatus {
    // 原有枚举值、属性、构造方法、Getter不变
    N("new", "New"),
    A("assigned", "Assigned"),
    IP("in_progress", "In-progress"),
    C("closed", "Closed");

    private String shortName;
    private String fullName;

    TicketStatus(String shortName, String fullName) {
        this.shortName = shortName;
        this.fullName = fullName;
    }

    @JsonValue
    public String getShortName() {
        return shortName;
    }

    public String getFullName() {
        return fullName;
    }

    // 新增静态转换方法
    public static List<TicketStatusTypesDTO> toDtoList() {
        return Arrays.stream(values())
                .map(status -> new TicketStatusTypesDTO(status.shortName, status.fullName))
                .collect(Collectors.toList());
    }
}

后续直接调用TicketStatus.toDtoList()就能拿到转换后的DTO列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:54:03