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
seen 

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...
searchCharSequences)

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:

https://github.com/elonderin/commons-lang-equalsOneOf

 

 

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

Reply via email to