!1376 feat: 通过全局缓存来优化每次都需要通过反射获取枚举对象 预估时间消耗减少到1/20到1/10 同时使用ConcurrentHashMa…

Merge pull request !1376 from Rainful/v5-master
This commit is contained in:
Looly
2025-08-25 08:49:17 +00:00
committed by Gitee

View File

@@ -8,6 +8,7 @@ import cn.hutool.core.map.MapUtil;
import java.lang.reflect.Field;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
@@ -243,6 +244,7 @@ public class EnumUtil {
/**
* 通过 某字段对应值 获取 枚举,获取不到时为 {@code defaultEnum}
* 通过缓存减少反射带来的影响
*
* @param enumClass 枚举类
* @param predicate 条件
@@ -254,10 +256,14 @@ public class EnumUtil {
if (null == enumClass || null == predicate) {
return null;
}
return Arrays.stream(enumClass.getEnumConstants())
Enum<?>[] constants = CACHE.computeIfAbsent(enumClass, k -> enumClass.getEnumConstants());
return Arrays.stream((E[]) constants)
.filter(predicate).findFirst().orElse(defaultEnum);
}
private static final Map<Class<?>, Enum<?>[]> CACHE = new ConcurrentHashMap<>();
/**
* 通过 某字段对应值 获取 枚举,获取不到时为 {@code null}
* <p>