I am trying to sort arraylist based on comparing two strings using comparator ,but i end up with Comparison method violates its general contract error. How do i handle if null comparison occurs in the string.
Code
Collections.sort(keyList, new DIMsComparator<DIM>(sortField));
public static class DIMsComparator<T> implements Comparator<T> {
    String sortField = "";
    public DIMsComparator(String sortField) {
        this.sortField = sortField;
    }
    public int compare(T obj1, T obj2) {
        if (!(obj1 instanceof DIM) || !(obj2 instanceof DIM))
            return obj1 instanceof DIM ? -1 : obj2 instanceof DIM ? 1 : 0;
        DIM dim1 = (DIM) obj1;
        DIM dim2 = (DIM) obj2;
        // Changes for Grouping enhancement starts
        /*
         * if(dim1.getGroupName() != "" || dim2.getGroupName() != "") return -1;
         */
        // Changes for Grouping enhancement ends
        if (dim1.isTextLine())
            return 1;
        if (dim2.isTextLine())
            return -1;
        String[] mySortFields = Util.split(this.sortField, ",");
        for (int i = 0; i < mySortFields.length; i++) {
            if (mySortFields[i].equals(""))
                break;
            int value = compare(dim1, dim2, mySortFields[i]);
            if (value == 0)
                continue;
            else
                return value;
        }
        return dim1.dimSeqNo > dim2.dimSeqNo ? 1 : dim1.dimSeqNo < dim2.dimSeqNo ? -1 : 0;
    }
Error
[err] java.lang.IllegalArgumentException: Comparison method violates its general contract!
[err]   at java.util.TimSort.mergeLo(TimSort.java:788)
[err]   at java.util.TimSort.mergeAt(TimSort.java:525)
[err]   at java.util.TimSort.mergeCollapse(TimSort.java:452)
[err]   at java.util.TimSort.sort(TimSort.java:256)
[err]   at java.util.Arrays.sort(Arrays.java:1856)
[err]   at java.util.ArrayList.sort(ArrayList.java:1471)
[err]   at java.util.Collections.sort(Collections.java:186)
 
     
     
    