java枚举k,v转换

java枚举k,v转换

import org.apache.commons.lang.StringUtils;

public enum ProcessStatus{
	
	BANK_ACT("银行已受理", 0),
	
	INIT("交易初核", 1),
	
	BANK_PAY("银行已先行垫付", 2),
	
	INFO_CHECK("交易信息核查中", 3),
	
	CERTIFICATION_READ("交易凭证调阅中", 4),
	
	MONEY_APPLY("申请追款中", 5),
	
	FAST_PAYFOR("快速赔付中", 6),
	
	DEEP_CHECK("深入调查中", 7),
	
	SECURITY_CHECK("交易安全性核查", 8),
	
	DATA_CHECK("材料核实处理", 9),
	
	DISPUTE_CANCLE("异议撤销处理中", 10),
	
	OVER("结束处理", 11);
	
	private int id;
	private String status;
	
	ProcessStatus(String status,int id){
		this.id = id;
		this.status = status;
	}

	public int getId() {
		return id;
	}
	
	public String getStatus() {
		return status;
	}
	
	public static String convert(String id) {
		
		if(StringUtils.isBlank(id)){ 
			return null;
		}
		
		ProcessStatus[] values = ProcessStatus.values();
		for (ProcessStatus processStatus : values) {
			if (processStatus.getId() == Integer.valueOf(id)) {
				return processStatus.getStatus();
			}
		}
		return null;
	}

}


<think>好的,我现在需要解决用户的问题:如何在Java Stream中将枚举类型转换为Map。首先,我需要理解用户的具体需求。用户提到参考了引用[1]和引用[2],其中引用[1]是关于Java Stream API的封装使用,引用[2]是关于枚举常量特定方法的例子,比如生成测试邮件。用户可能想利用Stream API来处理枚举,并将枚举的某些属性转换为Map结构,比如键值对。 首先,我需要回忆Java枚举的基本结构。枚举类型通常包含多个常量,每个常量可能有自己的属性。例如,用户可能在枚举中定义了不同的常量,每个常量有对应的代码或描述,现在希望将这些属性收集到一个Map中,方便查找。 接下来,考虑Java Stream API的相关方法。要将枚举转换为Map,常用的方法是使用Collectors.toMap()。但需要确定如何提取枚举常量的键和值。例如,假设枚举有一个name()方法和一个自定义的getCode()方法,那么可能需要用这些方法作为键和值。 然后,我需要考虑可能的代码示例。例如,枚举可能像这样: public enum Status { ACTIVE(1, "Active"), INACTIVE(2, "Inactive"); private int code; private String description; // 构造函数、getters等 } 要将这个枚举转换为Map,其中键是name(),值是description,可以使用Stream.of(Status.values())来创建流,然后收集到Map中。示例代码可能如下: Map<String, String> map = Arrays.stream(Status.values()) .collect(Collectors.toMap( Enum::name, Status::getDescription )); 不过,用户可能需要不同的键值组合,比如使用code作为键,description作为值,这时候需要调整提取函数。 另外,需要注意枚举常量的唯一性,确保作为键的属性没有重复,否则toMap()会抛出异常。如果有重复的可能,需要合并函数,比如 (existing, replacement) -> existing 来处理冲突。 此外,用户可能在引用[2]中提到枚举的生成器方法,例如Mail.generator()生成Iterable对象。可能用户希望将类似的结构结合Stream使用,例如将生成的Mail对象转换为Map。但当前问题主要是关于枚举本身的转换,所以可能需要先处理枚举常量到Map,而不是生成的对象。 最后,我需要验证代码的正确性,确保语法正确,比如使用Arrays.stream()或Stream.of()来创建流,正确引用枚举的方法,以及处理可能的异常情况。同时,根据用户提供的引用,可能需要提到如何封装这些操作用于通用场景,减少重复代码,如引用[1]中提到的封装Stream API。</think>在Java中,使用Stream API将枚举类型转换为Map的典型方法是通过`Collectors.toMap`实现。以下是两种常见场景的示例: ### 示例1:枚举名称与属性的映射 假设枚举包含代码和描述属性: ```java public enum Status { ACTIVE(1, "生效"), INACTIVE(2, "未生效"); private final int code; private final String description; Status(int code, String description) { this.code = code; this.description = description; } public int getCode() { return code; } public String getDescription() { return description; } } ``` #### 转换为`Map<名称, 描述>` ```java Map<String, String> enumMap = Arrays.stream(Status.values()) .collect(Collectors.toMap( Enum::name, // 键:枚举常量名称 Status::getDescription // 值:枚举描述 )); ``` #### 转换为`Map<代码, 描述>` ```java Map<Integer, String> codeMap = Arrays.stream(Status.values()) .collect(Collectors.toMap( Status::getCode, // 键:枚举代码 Status::getDescription // 值:枚举描述 )); ``` ### 示例2:处理重复键的进阶用法 若枚举属性可能重复,需添加合并函数: ```java Map<String, Status> conflictSafeMap = Stream.of(Status.values()) .collect(Collectors.toMap( Status::getDescription, Function.identity(), (existing, replacement) -> existing // 保留先出现的值 )); ``` ### 封装工具方法(引用[1]) 可封装通用转换逻辑: ```java public class EnumUtils { public static <E extends Enum<E>, K, V> Map<K, V> toMap( Class<E> enumClass, Function<E, K> keyMapper, Function<E, V> valueMapper ) { return Arrays.stream(enumClass.getEnumConstants()) .collect(Collectors.toMap(keyMapper, valueMapper)); } } // 调用示例 Map<Integer, String> utilsMap = EnumUtils.toMap( Status.class, Status::getCode, Status::getDescription ); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值