Is there clean syntax for checking if multiple variables all have the same value?

You could write a method that makes this look less cumbersome:

boolean areAllEqual(Object... values) {
    if (values.length < 2) {
        return true;
    }

    for (int i = 1; i < values.length; i++) {
        if (!values[i].equals(values[0])) {
            return false;
        }
    }

    return true;
}

Use it like this:

if (areAllEqual(x1, x2, x3, x4, x5)) {
    // do something
}

edit Too slow...! :-(


If you have lots of these variables, have you considered putting them in a collection instead of having them as separate variables? There are various options at that point.

If you find yourself doing this a lot, you might want to write helper methods, possibly using varargs syntax. For example:

public static boolean areAllEqual(int... values)
{
    if (values.length == 0)
    {
        return true; // Alternative below
    }
    int checkValue = values[0];
    for (int i = 1; i < values.length; i++)
    {
        if (values[i] != checkValue)
        {
            return false;
        }
    }
    return true;
}

An alternative as presented by glowcoder is to force there to be at least one value:

public static boolean areAllEqual(int checkValue, int... otherValues)
{
    for (int value : otherValues)
    {
        if (value != checkValue)
        {
            return false;
        }
    }
    return true;
}

In either case, use with:

if (HelperClass.areAllEqual(x1, x2, x3, x4, x5))
{
    ...
}

Similar to @Jon's solution but shorter.

public static boolean areAllTheSame(int value, int... values) {
    for (int i: values) if(value != i) return false;
    return true;
}

You could create a utility method like this:

public boolean allEqual(Object... objs) {
    if(objs.length < 2) return true; // 0 or 1 objects are all equal
    Object key = objs[0]; // pick one
    for(Object o : objs) if(!o.equals(key)) return false;
    return true;
}

Another option would be

public boolean allEqual(Object key, Object... objs) {
    for(Object o : objs) if(!o.equals(key)) return false;
    return true;
}

To simplify a lot of boilerplate logic. Then just go

if(allEqual(x,x1,x2,x3))

Obviously the two are mutually exclusive (they are signaturely ambigous) but you could have allEqual and allEqualWithKey

Tags:

Java