commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "thomas menzel" <>
Subject [lang] new method: ObjectsUtils.equalsOneOf()
Date Sat, 06 Aug 2016 20:43:03 GMT
Hi folks,


I'm proposing a new function on ObjectsUtils: 



     * Checks if the given {@code ref} is contained at least once in

     * {@code others}. If {@code} is null or empty then {@code false} is

     * returned.

     * <p>

     * This is a more readable replacement for the idiomatic:

     * {@code Arrays.asList(others).contains(ref)}.


     * <pre>

     * ObjectUtils.equalsOneOf(1, 2, 1))                   = true 

     * ObjectUtils.equalsOneOf(1, 1, 2))                   = true 

     * ObjectUtils.equalsOneOf(1, null, 1))                = true 

     * ObjectUtils.equalsOneOf(null, 1, null))             = true 

     * ObjectUtils.equalsOneOf("b", "a b c".split(" ")))   = true 

     * ObjectUtils.equalsOneOf(null, null))                = false

     * ObjectUtils.equalsOneOf(1, null))                   = false

     * ObjectUtils.equalsOneOf(null, new Object[0]))       = false

     * ObjectUtils.equalsOneOf(1, 2, 3))                   = false

     * </pre>


     * @param ref

     *            the ref value to check the others against

     * @param others

     *            the others

     * @return true, iff {@code ref} is contained at least once in

     *         {@code others}

     * @since 3.5


    public static boolean equalsOneOf(final Object ref, final Object...
others) {

                return ArrayUtils.isNotEmpty(others) &&
ArrayUtils.contains(others, ref);



Use Case: 

comparing a value to several others in a condition thus avoiding the often

Other1.equals(string) || Other2.equals(string) || .


Since this is a shorthand for the above, the OTHER values are usually not in
a collection, e.g.


ObjectUtils.equalsOneOf(e, FooEnum.X, FooEnum.Y  );  

ObjectUtils.equalsOneOf(string, "A", "B", "C");  


One could also accomplish the same thing with: 

Arrays.asList(Other1, Other2, ..).contains(ref) but this is less readable
and also the List is created needlessly.



Note, there is a similar function on StringUtils: 

                containsAny(CharSequence cs, CharSequence...

but obviously only for Strings and doing the "conains" check vs. the
proposed equals-check.


The code for the function is in the last commit of the fork and includes a
full unit test:



As a bonus I have also added the companion functions in the same commit:

public static boolean allNull(final Object... values)

public static boolean anyNull(final Object... values)


which is in the same vain as isNull/isNotNull etc. to promote readability.

Also with unit tests.


Hope u like these and add them to the grand collection of util functions.



Thomas Menzel

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message