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