+1 for the proposal!

I think ObjectUtils is a good home, the implied array or collection is an
implementation detail.

What is your reasoning for null != null ?

If you accept a Function to compare with, that would break the varargs
mechanism (or always require a Function), perhaps such a function could
have a more functional name like firstWhich ? (Which first argument is a
selector function)

On 6 Aug 2016 10:43 p.m., "thomas menzel" <d...@tomsit.de> wrote:

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