2828import java .util .stream .Collectors ;
2929import java .util .stream .Stream ;
3030
31+ import org .apache .commons .lang3 .stream .Streams ;
32+
3133/**
3234 * Utility library to provide helper methods for Java enums.
3335 *
@@ -68,8 +70,8 @@ private static <E extends Enum<E>> Class<E> asEnum(final Class<E> enumClass) {
6870 */
6971 private static <E extends Enum <E >> Class <E > checkBitVectorable (final Class <E > enumClass ) {
7072 final E [] constants = asEnum (enumClass ).getEnumConstants ();
71- Validate .isTrue (constants .length <= Long .SIZE , CANNOT_STORE_S_S_VALUES_IN_S_BITS ,
72- Integer . valueOf ( constants . length ), enumClass . getSimpleName (), Integer .valueOf (Long .SIZE ));
73+ Validate .isTrue (constants .length <= Long .SIZE , CANNOT_STORE_S_S_VALUES_IN_S_BITS , Integer . valueOf ( constants . length ), enumClass . getSimpleName (),
74+ Integer .valueOf (Long .SIZE ));
7375 return enumClass ;
7476 }
7577
@@ -298,7 +300,7 @@ public static <E extends Enum<E>> Map<String, E> getEnumMap(final Class<E> enumC
298300 * @since 3.13.0
299301 */
300302 public static <E extends Enum <E >, K > Map <K , E > getEnumMap (final Class <E > enumClass , final Function <E , K > keyFunction ) {
301- return Stream . of (enumClass . getEnumConstants () ).collect (Collectors .toMap (keyFunction ::apply , Function .identity ()));
303+ return stream (enumClass ).collect (Collectors .toMap (keyFunction ::apply , Function .identity ()));
302304 }
303305
304306 /**
@@ -341,7 +343,7 @@ public static <E extends Enum<E>> E getFirstEnum(final Class<E> enumClass, final
341343 if (isEnum (enumClass )) {
342344 return defaultEnum ;
343345 }
344- return Stream . of (enumClass . getEnumConstants () ).filter (e -> value == toIntFunction .applyAsInt (e )).findFirst ().orElse (defaultEnum );
346+ return stream (enumClass ).filter (e -> value == toIntFunction .applyAsInt (e )).findFirst ().orElse (defaultEnum );
345347 }
346348
347349 /**
@@ -363,7 +365,7 @@ public static <E extends Enum<E>> E getFirstEnumIgnoreCase(final Class<E> enumCl
363365 if (enumName == null || !enumClass .isEnum ()) {
364366 return defaultEnum ;
365367 }
366- return Stream . of (enumClass . getEnumConstants () ).filter (e -> enumName .equalsIgnoreCase (stringFunction .apply (e ))).findFirst ().orElse (defaultEnum );
368+ return stream (enumClass ).filter (e -> enumName .equalsIgnoreCase (stringFunction .apply (e ))).findFirst ().orElse (defaultEnum );
367369 }
368370
369371 private static <E extends Enum <E >> boolean isEnum (final Class <E > enumClass ) {
@@ -416,8 +418,7 @@ public static <E extends Enum<E>> boolean isValidEnumIgnoreCase(final Class<E> e
416418 * @since 3.0.1
417419 */
418420 public static <E extends Enum <E >> EnumSet <E > processBitVector (final Class <E > enumClass , final long value ) {
419- checkBitVectorable (enumClass ).getEnumConstants ();
420- return processBitVectors (enumClass , value );
421+ return processBitVectors (checkBitVectorable (enumClass ), value );
421422 }
422423
423424 /**
@@ -437,15 +438,28 @@ public static <E extends Enum<E>> EnumSet<E> processBitVectors(final Class<E> en
437438 final EnumSet <E > results = EnumSet .noneOf (asEnum (enumClass ));
438439 final long [] lvalues = ArrayUtils .clone (Objects .requireNonNull (values , "values" ));
439440 ArrayUtils .reverse (lvalues );
440- for ( final E constant : enumClass . getEnumConstants ()) {
441+ stream ( enumClass ). forEach ( constant -> {
441442 final int block = constant .ordinal () / Long .SIZE ;
442443 if (block < lvalues .length && (lvalues [block ] & 1L << constant .ordinal () % Long .SIZE ) != 0 ) {
443444 results .add (constant );
444445 }
445- }
446+ });
446447 return results ;
447448 }
448449
450+ /**
451+ * Returns a sequential ordered stream whose elements are the given class' enum values.
452+ *
453+ * @param <T> the type of stream elements.
454+ * @param clazz the class containing the enum values.
455+ * @return the new stream.
456+ * @since 3.18.0
457+ * @see Class#getEnumConstants()
458+ */
459+ public static <T > Stream <T > stream (final Class <T > clazz ) {
460+ return Streams .of (clazz .getEnumConstants ());
461+ }
462+
449463 /**
450464 * This constructor is public to permit tools that require a JavaBean
451465 * instance to operate.
0 commit comments