0

i want to sort my json by one float parameter by Comparator . but its show me this error : Comparison method violates its general contract!

i have another Comparator class that is working properly but that one is Comparating an other thing

this is my Comparator :

 public class MyChangeComparator implements Comparator<myContact> {

int type = 1;

public MyChangeComparator(int type) {

    this.type = type;

}


@Override
public int compare(myContact myContact, myContact t1) {

    if (myContact.getPercent_change_1h() == null || t1.getPercent_change_1h() == null
            || myContact.getPercent_change_24h() == null || t1.getPercent_change_24h() == null ||
            myContact.getPercent_change_7d() == null || t1.getPercent_change_7d() == null){
        return 0;
    }
    float m1 = 1;
    float m2 = 2;

    boolean ba = false;
    boolean aa = false;

    if (type == 1){
        String a = myContact.getPercent_change_1h();
        if (a.contains("-")){
            a = a.replace("-" , "");
            aa = true;
        }
        m1 = Float.parseFloat(a);
        if (aa == true){
            m1 = -m1;
            aa = false;
        }
        String b = t1.getPercent_change_1h();
        if (b.contains("-")){
            b = b.replace("-" , "");
            ba = true;
        }
        m2 = Float.parseFloat(b);
        if (ba == true){
            m2 = -m2;
            ba = false;
        }
    }else if (type == 2){
        String a = myContact.getPercent_change_24h();
        a = a.replace("-" , "");
        m1 = Float.parseFloat(a);
        String b = t1.getPercent_change_24h();
        b = b.replace("-" , "");
        m2 = Float.parseFloat(b);
    }else if (type == 3) {
        String a = myContact.getPercent_change_7d();
        a = a.replace("-" , "");
        m1 = Float.parseFloat(a);
        String b = t1.getPercent_change_7d();
        b = b.replace("-" , "");
        m2 = Float.parseFloat(b);
    }


    if (m1 < m2){
        return 1;
    }else if (m1 >= m2){
        return -1;
    }else {
        return 0;
    }
}

app is working when i change returns to this :

if (m1 < m2){
    return -1;
}else if (m1 >= m2){
    return 1;
}else {
    return 0;
}

i think when i use return 1 app is crashing

Hadi Ahmadi
  • 129
  • 12

0 Answers0