
本文详细介绍了如何利用java stream api将自定义枚举类型中的常量名称及其关联标签高效地转换为一个自定义数据传输对象(dto)列表。通过实例代码,演示了从枚举值流化到映射为新对象并最终收集为列表的完整过程,旨在帮助开发者优化枚举数据处理,实现数据模型的灵活转换。
在现代Java应用开发中,枚举(Enum)常用于定义一组固定的常量。然而,有时我们需要将这些枚举常量及其内部属性(如标签、描述等)转换为其他数据结构,例如一个包含特定字段的列表对象,以便于前端展示或与其他服务进行数据交互。本文将详细阐述如何利用Java 8及更高版本提供的Stream API,优雅地实现这一转换过程。
我们的目标是将一个自定义枚举类型中的每个常量,连同其内部定义的标签,映射到一个新的自定义数据传输对象(DTO)实例中,并最终将所有这些DTO实例收集成一个列表。
原始枚举定义:
假设我们有一个 ProductActions 枚举,它包含了一系列产品操作及其对应的用户友好标签:
立即学习“Java免费学习笔记(深入)”;
public enum ProductActions {
BUY("Buy"),
SELL("Sell"),
TRANSFER("Transfer"); // 注意:原问题中的Transfer首字母大写,Java枚举常量通常全大写,这里保持原样
public final String label;
ProductActions(String label) {
this.label = label;
}
// 可选:提供一个获取label的方法,虽然直接访问public final字段也可以
public String getLabel() {
return label;
}
}目标数据传输对象(DTO):
我们希望将上述枚举常量转换为 ProductActionItem 类的实例,该类包含两个字段:productAction 用于存储枚举常量的名称,productLabel 用于存储枚举的标签。
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductActionItem {
private String productAction;
private String productLabel;
}为了方便,这里使用了Lombok注解来自动生成构造函数、Getter/Setter等。如果没有Lombok,需要手动添加相应的构造函数。
Java Stream API 提供了一种声明式、函数式的方式来处理集合数据。要将枚举转换为自定义对象列表,我们可以遵循以下步骤:
具体实现代码:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class EnumConverter {
public static List<ProductActionItem> getProductActionItems() {
return Arrays.stream(ProductActions.values()) // 1. 获取所有枚举常量并创建Stream
.map(action -> new ProductActionItem(action.name(), action.getLabel())) // 2. 映射每个枚举常量到ProductActionItem
.collect(Collectors.toList()); // 3. 收集为List
// 对于Java 16及以上版本,可以使用更简洁的 .toList();
// .toList();
}
public static void main(String[] args) {
List<ProductActionItem> items = getProductActionItems();
items.forEach(item -> System.out.println("Action: " + item.getProductAction() + ", Label: " + item.getProductLabel()));
/*
* 预期输出:
* Action: BUY, Label: Buy
* Action: SELL, Label: Sell
* Action: TRANSFER, Label: Transfer
*/
}
}代码解析:
通过Java Stream API,我们可以非常高效和优雅地将枚举类型中的常量及其自定义属性转换为目标数据传输对象列表。这种模式不仅减少了样板代码,提高了代码的可读性和维护性,也充分利用了Java函数式编程的优势。掌握这一技巧,将有助于开发者在处理复杂数据转换场景时更加得心应手。
以上就是Java枚举到自定义对象列表的Stream API转换指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号