Returns whether the arrays are equal by examining each of their elements, even if they are arrays themselves. - Java Collection Framework

Java examples for Collection Framework:Array Element Filter

Description

Returns whether the arrays are equal by examining each of their elements, even if they are arrays themselves.

Demo Code


//package com.java2s;

public class Main {
    public static void main(String[] argv) {
        Object[] thisArray = new String[] { "1", "abc", "level", null,
                "java2s.com", "asdf 123" };
        Object[] thatArray = new String[] { "1", "abc", "level", null,
                "java2s.com", "asdf 123" };
        System.out// w w w . ja v  a 2  s  .c  o  m
                .println(valuesAreTransitivelyEqual(thisArray, thatArray));
    }

    /**
     * Returns whether the arrays are equal by examining each of their elements, even if they are
     * arrays themselves.
     * 
     * @param thisArray Object[]
     * @param thatArray Object[]
     * @return boolean
     */
    public static final boolean valuesAreTransitivelyEqual(
            Object[] thisArray, Object[] thatArray) {
        if (thisArray == thatArray)
            return true;
        if ((thisArray == null) || (thatArray == null))
            return false;
        if (thisArray.length != thatArray.length)
            return false;
        for (int i = 0; i < thisArray.length; i++) {
            if (!areEqual(thisArray[i], thatArray[i]))
                return false; // recurse if req'd
        }
        return true;
    }

    /**
     * A comprehensive isEqual method that handles nulls and arrays safely.
     * 
     * @param value Object
     * @param otherValue Object
     * @return boolean
     */
    public static final boolean areEqual(Object value, Object otherValue) {
        if (value == otherValue)
            return true;
        if (value == null)
            return false;
        if (otherValue == null)
            return false;

        if (value.getClass().getComponentType() != null)
            return arraysAreEqual(value, otherValue);
        return value.equals(otherValue);
    }

    /**
     * Returns true if the objects are array instances and each of their elements compares
     * via equals as well.
     * 
     * @param value Object
     * @param otherValue Object
     * @return boolean
     */
    public static final boolean arraysAreEqual(Object value,
            Object otherValue) {
        if (value instanceof Object[]) {
            if (otherValue instanceof Object[])
                return valuesAreTransitivelyEqual((Object[]) value,
                        (Object[]) otherValue);
            return false;
        }
        return false;
    }
}

Related Tutorials