mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-12-06 17:18:54 +08:00
!1376 feat: 通过全局缓存来优化每次都需要通过反射获取枚举对象 预估时间消耗减少到1/20到1/10 同时使用ConcurrentHashMa…
Merge pull request !1376 from Rainful/v5-master
This commit is contained in:
commit
c00de90179
@ -8,6 +8,7 @@ import cn.hutool.core.map.MapUtil;
|
|||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
@ -243,6 +244,7 @@ public class EnumUtil {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过 某字段对应值 获取 枚举,获取不到时为 {@code defaultEnum}
|
* 通过 某字段对应值 获取 枚举,获取不到时为 {@code defaultEnum}
|
||||||
|
* 通过缓存减少反射带来的影响
|
||||||
*
|
*
|
||||||
* @param enumClass 枚举类
|
* @param enumClass 枚举类
|
||||||
* @param predicate 条件
|
* @param predicate 条件
|
||||||
@ -254,10 +256,14 @@ public class EnumUtil {
|
|||||||
if (null == enumClass || null == predicate) {
|
if (null == enumClass || null == predicate) {
|
||||||
return null;
|
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);
|
.filter(predicate).findFirst().orElse(defaultEnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final Map<Class<?>, Enum<?>[]> CACHE = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过 某字段对应值 获取 枚举,获取不到时为 {@code null}
|
* 通过 某字段对应值 获取 枚举,获取不到时为 {@code null}
|
||||||
* <p>
|
* <p>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user