add method

This commit is contained in:
Looly 2022-03-25 02:31:47 +08:00
parent da40e42124
commit 222f18e847
2 changed files with 21 additions and 3 deletions

View File

@ -12,6 +12,7 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Predicate;
/** /**
* 枚举工具类 * 枚举工具类
@ -214,6 +215,19 @@ public class EnumUtil {
return names; return names;
} }
/**
* 通过 某字段对应值 获取 枚举获取不到时为 {@code null}
*
* @param enumClass 枚举类
* @param predicate 条件
* @param <E> 枚举类型
* @return 对应枚举 获取不到时为 {@code null}
* @since 5.8.0
*/
public static <E extends Enum<E>> E getBy(Class<E> enumClass, Predicate<? super E> predicate) {
return Arrays.stream(enumClass.getEnumConstants())
.filter(predicate).findFirst().orElse(null);
}
/** /**
* 通过 某字段对应值 获取 枚举获取不到时为 {@code null} * 通过 某字段对应值 获取 枚举获取不到时为 {@code null}
@ -225,7 +239,11 @@ public class EnumUtil {
* @return 对应枚举 获取不到时为 {@code null} * @return 对应枚举 获取不到时为 {@code null}
*/ */
public static <E extends Enum<E>, C> E getBy(Func1<E, C> condition, C value) { public static <E extends Enum<E>, C> E getBy(Func1<E, C> condition, C value) {
return Arrays.stream(LambdaUtil.getImplClass(condition).getEnumConstants()).filter(e -> condition.callWithRuntimeException(e).equals(value)).findAny().orElse(null); Class<E> implClass = LambdaUtil.getImplClass(condition);
if (Enum.class.equals(implClass)) {
implClass = LambdaUtil.getInstantiatedClass(condition);
}
return Arrays.stream(implClass.getEnumConstants()).filter(e -> condition.callWithRuntimeException(e).equals(value)).findAny().orElse(null);
} }
/** /**
@ -243,7 +261,7 @@ public class EnumUtil {
public static <E extends Enum<E>, F, C> F getFieldBy(Func1<E, F> field, public static <E extends Enum<E>, F, C> F getFieldBy(Func1<E, F> field,
Function<E, C> condition, C value) { Function<E, C> condition, C value) {
Class<E> implClass = LambdaUtil.getImplClass(field); Class<E> implClass = LambdaUtil.getImplClass(field);
if(Enum.class.equals(implClass)){ if (Enum.class.equals(implClass)) {
implClass = LambdaUtil.getInstantiatedClass(field); implClass = LambdaUtil.getInstantiatedClass(field);
} }
return Arrays.stream(implClass.getEnumConstants()) return Arrays.stream(implClass.getEnumConstants())

View File

@ -37,7 +37,7 @@ public class EnumUtilTest {
@Test @Test
public void getByTest() { public void getByTest() {
// 枚举中字段互相映射使用 // 枚举中字段互相映射使用
TestEnum testEnum = EnumUtil.getBy(TestEnum::getType, "type2"); TestEnum testEnum = EnumUtil.getBy(TestEnum::ordinal, 1);
Assert.assertEquals("TEST2", testEnum.name()); Assert.assertEquals("TEST2", testEnum.name());
} }