Comparison method violates its general contract [How to Solve]

Error code:

//Error Codes
        Comparator<InspectReportListItemMpVo> comparator = new Comparator<InspectReportListItemMpVo>() {
            public int compare(InspectReportListItemMpVo o1, InspectReportListItemMpVo o2) {
                try {
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    Date reportTime_o1 = simpleDateFormat.parse(o1.getReportTime());
                    Date reportTime_o2 = simpleDateFormat.parse(o2.getReportTime());
//                    return reportTime_o1.compareTo(reportTime_o2);
                    return reportTime_o2.compareTo(reportTime_o1);
                } catch (ParseException e) {
                    return 1;

Screenshot of error reporting:

Comparison method violates its general contract


(not rigorous!) return 1 in the catch block; Change to return 0;

Supplement: rigorous writing

       Collections.sort(list, new Comparator<String>() {
            public int compare(String arg1, String arg2) {
                 * Modified
                if(StringUtils.isBlank(arg1) ) {
                    if(StringUtils.isBlank(arg2)) {
                        return 0;
                    }else {
                        return -1;
                }else if(StringUtils.isBlank(arg2)){
                    return 1;
                return arg1.compareTo(arg2);

Cause: timsort has a reflexivity check

Timport algorithm rules:
after JDK7, after implementing the comparable interface, the following three characteristics should be met:
1) Reflexivity: the comparison results of X and y are opposite to those of Y and X
2) transitivity: X > y,y> z. Then x > z。
3) symmetry: if x = y, the comparison results of X and Z are the same as those of Y and Z.

For the above error code, if you directly return 1, assume that a is empty, a.compareto (b) = 1, and b.compareto (a) = 1, which does not satisfy reflexivity

Read More: