diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/util/EnumUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/util/EnumUtil.java index f84ce1a4b..a67e741dc 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/util/EnumUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/util/EnumUtil.java @@ -257,11 +257,27 @@ public class EnumUtil { * @since 5.8.0 */ public static > E getBy(final Class enumClass, final Predicate predicate) { + return getBy(enumClass, predicate, null); + } + + /** + * 通过 某字段对应值 获取 枚举,获取不到时为 {@code defaultEnum} + * + * @param enumClass 枚举类 + * @param predicate 条件 + * @param defaultEnum 获取不到时的默认枚举值 + * @param 枚举类型 + * @return 对应枚举 ,获取不到时为 {@code defaultEnum} + * @since 5.8.35 + */ + public static > E getBy(final Class enumClass, + final Predicate predicate, + final E defaultEnum) { if (null == enumClass || null == predicate) { return null; } return Arrays.stream(enumClass.getEnumConstants()) - .filter(predicate).findFirst().orElse(null); + .filter(predicate).findAny().orElse(defaultEnum); } /** @@ -274,14 +290,7 @@ public class EnumUtil { * @return 对应枚举 ,获取不到时为 {@code null} */ public static , C> E getBy(final SerFunction condition, final C value) { - if(null == condition){ - return null; - } - final Class implClass = LambdaUtil.getRealClass(condition); - return Arrays.stream(implClass.getEnumConstants()) - .filter(constant -> ObjUtil.equals(condition.apply(constant), value)) - .findAny() - .orElse(null); + return getBy(condition, value, null); } /** @@ -295,7 +304,14 @@ public class EnumUtil { * @return 对应枚举 ,获取不到时为 {@code null} */ public static , C> E getBy(final SerFunction condition, final C value, final E defaultEnum) { - return ObjUtil.defaultIfNull(getBy(condition, value), defaultEnum); + if (null == condition) { + return null; + } + final Class implClass = LambdaUtil.getRealClass(condition); + return Arrays.stream(implClass.getEnumConstants()) + .filter(constant -> ObjUtil.equals(condition.apply(constant), value)) + .findAny() + .orElse(defaultEnum); } /** @@ -312,7 +328,7 @@ public class EnumUtil { */ public static , F, C> F getFieldBy(final SerFunction field, final Function condition, final C value) { - if(null == field || null == condition){ + if (null == field || null == condition) { return null; } Class implClass = LambdaUtil.getRealClass(field); @@ -337,7 +353,7 @@ public class EnumUtil { * @since 4.0.2 */ public static > LinkedHashMap getEnumMap(final Class enumClass) { - if(null == enumClass){ + if (null == enumClass) { return null; } final LinkedHashMap map = new LinkedHashMap<>(); @@ -356,7 +372,7 @@ public class EnumUtil { * @return 枚举名对应指定字段值的Map */ public static Map getNameFieldMap(final Class> clazz, final String fieldName) { - if(null == clazz || StrUtil.isBlank(fieldName)){ + if (null == clazz || StrUtil.isBlank(fieldName)) { return null; } final Enum[] enums = clazz.getEnumConstants(); @@ -378,7 +394,7 @@ public class EnumUtil { */ public static > boolean contains(final Class enumClass, final String name) { final LinkedHashMap enumMap = getEnumMap(enumClass); - if(CollUtil.isEmpty(enumMap)){ + if (CollUtil.isEmpty(enumMap)) { return false; } return enumMap.containsKey(name);