如何将整数数组转换为枚举数组?Java实现方案咨询
最简单的实现方式
其实结合你已经掌握的单个整数转枚举的思路,用Java 8+的Stream API就能很简洁地完成批量转换,当然传统循环也可以,下面给你两种实用方案:
方案1:Stream API(代码最简洁)
首先先完善你的单个转换方法(适配my_enum):
public static my_enum convertIntToMyEnum(int intValue) { // 遍历所有枚举值匹配对应的int for (my_enum enumVal : my_enum.values()) { if (enumVal.getColorAsInt() == intValue) { return enumVal; } } // 没有匹配的情况,建议抛出异常或者返回默认值(根据你的业务需求调整) throw new IllegalArgumentException("No matching my_enum for integer: " + intValue); }
然后用Stream批量处理数组:
int[] foo = some_method_i_cannot_modify(); my_enum[] bar = Arrays.stream(foo) .mapToObj(YourClassName::convertIntToMyEnum) // 替换成你的类名 .toArray(my_enum[]::new);
代码解释:
Arrays.stream(foo):把原始int数组转换成IntStreammapToObj(...):将每个int值通过转换方法映射为对应的my_enum对象toArray(my_enum[]::new):把Stream中的枚举对象收集成目标类型的数组
方案2:传统for循环(兼容老版本Java)
如果你的项目还在用Java 8之前的版本,用循环也很直接易懂:
int[] foo = some_method_i_cannot_modify(); my_enum[] bar = new my_enum[foo.length]; for (int i = 0; i < foo.length; i++) { bar[i] = convertIntToMyEnum(foo[i]); }
优化建议:添加缓存提升性能
如果你的枚举值很多,或者需要频繁执行转换操作,每次遍历values()会有点低效。可以提前初始化一个HashMap做缓存,把int值和对应的枚举值映射起来:
// 类级别的缓存,只初始化一次 private static final Map<Integer, my_enum> INT_TO_ENUM_CACHE; static { INT_TO_ENUM_CACHE = new HashMap<>(); for (my_enum enumVal : my_enum.values()) { INT_TO_ENUM_CACHE.put(enumVal.getColorAsInt(), enumVal); } } public static my_enum convertIntToMyEnum(int intValue) { my_enum enumVal = INT_TO_ENUM_CACHE.get(intValue); if (enumVal == null) { throw new IllegalArgumentException("No matching my_enum for integer: " + intValue); } return enumVal; }
这样后续的转换都是O(1)的时间复杂度,效率会高很多。
内容的提问来源于stack exchange,提问作者463035818_is_not_an_ai
相关产品推荐
相关产品推荐

