mirror of
https://gitee.com/dromara/hutool.git
synced 2025-10-07 15:14:42 +08:00
!1376 feat: 通过全局缓存来优化每次都需要通过反射获取枚举对象 预估时间消耗减少到1/20到1/10 同时使用ConcurrentHashMa…
Merge pull request !1376 from Rainful/v5-master
This commit is contained in:
@@ -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>
|
||||
|
Reference in New Issue
Block a user