@@ -60,11 +60,11 @@ public static String toString(Enum<?> e) {
60
60
* @since 5.1.6
61
61
*/
62
62
public static <E extends Enum <E >> E getEnumAt (Class <E > enumClass , int index ) {
63
- if (null == enumClass ){
63
+ if (null == enumClass ) {
64
64
return null ;
65
65
}
66
66
final E [] enumConstants = enumClass .getEnumConstants ();
67
- if (index < 0 ){
67
+ if (index < 0 ) {
68
68
index = enumConstants .length + index ;
69
69
}
70
70
@@ -129,7 +129,7 @@ public static <E extends Enum<E>> E fromStringQuietly(Class<E> enumClass, String
129
129
*/
130
130
@ SuppressWarnings ("unchecked" )
131
131
public static <E extends Enum <E >> E likeValueOf (Class <E > enumClass , Object value ) {
132
- if (null == enumClass || null == value ){
132
+ if (null == enumClass || null == value ) {
133
133
return null ;
134
134
}
135
135
if (value instanceof CharSequence ) {
@@ -161,7 +161,7 @@ public static <E extends Enum<E>> E likeValueOf(Class<E> enumClass, Object value
161
161
* @return name列表
162
162
*/
163
163
public static List <String > getNames (Class <? extends Enum <?>> clazz ) {
164
- if (null == clazz ){
164
+ if (null == clazz ) {
165
165
return null ;
166
166
}
167
167
final Enum <?>[] enums = clazz .getEnumConstants ();
@@ -183,7 +183,7 @@ public static List<String> getNames(Class<? extends Enum<?>> clazz) {
183
183
* @return 字段值列表
184
184
*/
185
185
public static List <Object > getFieldValues (Class <? extends Enum <?>> clazz , String fieldName ) {
186
- if (null == clazz || StrUtil .isBlank (fieldName )){
186
+ if (null == clazz || StrUtil .isBlank (fieldName )) {
187
187
return null ;
188
188
}
189
189
final Enum <?>[] enums = clazz .getEnumConstants ();
@@ -210,7 +210,7 @@ public static List<Object> getFieldValues(Class<? extends Enum<?>> clazz, String
210
210
* @since 4.1.20
211
211
*/
212
212
public static List <String > getFieldNames (Class <? extends Enum <?>> clazz ) {
213
- if (null == clazz ){
213
+ if (null == clazz ) {
214
214
return null ;
215
215
}
216
216
final List <String > names = new ArrayList <>();
@@ -238,11 +238,62 @@ public static List<String> getFieldNames(Class<? extends Enum<?>> clazz) {
238
238
* @since 5.8.0
239
239
*/
240
240
public static <E extends Enum <E >> E getBy (Class <E > enumClass , Predicate <? super E > predicate ) {
241
- if (null == enumClass || null == predicate ){
241
+ return getBy (enumClass , predicate , null );
242
+ }
243
+
244
+ /**
245
+ * 通过 某字段对应值 获取 枚举,获取不到时为 {@code defaultEnum}
246
+ *
247
+ * @param enumClass 枚举类
248
+ * @param predicate 条件
249
+ * @param defaultEnum 获取不到时的默认枚举值
250
+ * @param <E> 枚举类型
251
+ * @return 对应枚举 ,获取不到时为 {@code defaultEnum}
252
+ */
253
+ public static <E extends Enum <E >> E getBy (Class <E > enumClass , Predicate <? super E > predicate , E defaultEnum ) {
254
+ if (null == enumClass || null == predicate ) {
242
255
return null ;
243
256
}
244
257
return Arrays .stream (enumClass .getEnumConstants ())
245
- .filter (predicate ).findFirst ().orElse (null );
258
+ .filter (predicate ).findFirst ().orElse (defaultEnum );
259
+ }
260
+
261
+ /**
262
+ * 通过 某字段对应值 获取 枚举,获取不到时为 {@code null}
263
+ * <p/>
264
+ * {@link LambdaUtil#getRealClass(Func1)}} 是相对耗时的
265
+ * 如果枚举值比较多,那么{@link EnumUtil#getBy(Func1, Object)} 方法
266
+ * 大部分时间都是被{@link LambdaUtil#getRealClass(Func1)}}所消耗的
267
+ * <br/>
268
+ * 如果可以在编码过程中可以提供对应的枚举类 该方法与枚举的{@code Enum.values()}方法是差不多的。
269
+ *
270
+ * @param enumClass 枚举类, 为{@code null}返回{@code null}
271
+ * @param condition 条件字段,为{@code null}返回{@code null}
272
+ * @param value 条件字段值
273
+ * @param <E> 枚举类型
274
+ * @param <C> 字段类型
275
+ * @return 对应枚举 ,获取不到时为 {@code null}
276
+ */
277
+ public static <E extends Enum <E >, C > E getBy (Class <E > enumClass , Func1 <E , C > condition , C value ) {
278
+ if (null == condition ) {
279
+ return null ;
280
+ }
281
+ return getBy (enumClass , constant -> ObjUtil .equals (condition .callWithRuntimeException (constant ), value ));
282
+ }
283
+
284
+ /**
285
+ * 通过 某字段对应值 获取 枚举,获取不到时为 {@code defaultEnum}
286
+ *
287
+ * @param enumClass 枚举类, 为{@code null}返回{@code null}
288
+ * @param condition 条件字段,为{@code null}返回{@code null}
289
+ * @param value 条件字段值
290
+ * @param defaultEnum 获取不到时的默认枚举值
291
+ * @param <E> 枚举类型
292
+ * @param <C> 字段类型
293
+ * @return 对应枚举 ,获取不到时为 {@code defaultEnum}
294
+ */
295
+ public static <E extends Enum <E >, C > E getBy (Class <E > enumClass , Func1 <E , C > condition , C value , E defaultEnum ) {
296
+ return ObjectUtil .defaultIfNull (getBy (enumClass , condition , value ), defaultEnum );
246
297
}
247
298
248
299
/**
@@ -259,10 +310,7 @@ public static <E extends Enum<E>, C> E getBy(Func1<E, C> condition, C value) {
259
310
return null ;
260
311
}
261
312
final Class <E > implClass = LambdaUtil .getRealClass (condition );
262
- return Arrays .stream (implClass .getEnumConstants ())
263
- .filter (constant -> ObjUtil .equals (condition .callWithRuntimeException (constant ), value ))
264
- .findAny ()
265
- .orElse (null );
313
+ return getBy (implClass , condition , value );
266
314
}
267
315
268
316
/**
@@ -293,7 +341,7 @@ public static <E extends Enum<E>, C> E getBy(Func1<E, C> condition, C value, E d
293
341
* @since 5.8.0
294
342
*/
295
343
public static <E extends Enum <E >, F , C > F getFieldBy (Func1 <E , F > field , Function <E , C > condition , C value ) {
296
- if (null == field || null == condition ){
344
+ if (null == field || null == condition ) {
297
345
return null ;
298
346
}
299
347
final Class <E > implClass = LambdaUtil .getRealClass (field );
@@ -316,7 +364,7 @@ public static <E extends Enum<E>, F, C> F getFieldBy(Func1<E, F> field, Function
316
364
* @since 4.0.2
317
365
*/
318
366
public static <E extends Enum <E >> LinkedHashMap <String , E > getEnumMap (final Class <E > enumClass ) {
319
- if (null == enumClass ){
367
+ if (null == enumClass ) {
320
368
return null ;
321
369
}
322
370
final LinkedHashMap <String , E > map = new LinkedHashMap <>();
@@ -335,7 +383,7 @@ public static <E extends Enum<E>> LinkedHashMap<String, E> getEnumMap(final Clas
335
383
* @return 枚举名对应指定字段值的Map
336
384
*/
337
385
public static Map <String , Object > getNameFieldMap (Class <? extends Enum <?>> clazz , String fieldName ) {
338
- if (null == clazz || StrUtil .isBlank (fieldName )){
386
+ if (null == clazz || StrUtil .isBlank (fieldName )) {
339
387
return null ;
340
388
}
341
389
final Enum <?>[] enums = clazz .getEnumConstants ();
@@ -359,7 +407,7 @@ public static Map<String, Object> getNameFieldMap(Class<? extends Enum<?>> clazz
359
407
*/
360
408
public static <E extends Enum <E >> boolean contains (final Class <E > enumClass , String val ) {
361
409
final LinkedHashMap <String , E > enumMap = getEnumMap (enumClass );
362
- if (CollUtil .isEmpty (enumMap )){
410
+ if (CollUtil .isEmpty (enumMap )) {
363
411
return false ;
364
412
}
365
413
return enumMap .containsKey (val );
0 commit comments