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