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)