Getting java.lang.IllegalArgumentException: Comparison method violates its general contract! with a sort algo that should be 100% stable

StackOverflow https://stackoverflow.com/questions/21164931

No idea how this could ever be unstable. This works fine on most cases, but throws IllegalArgumentException with some queries.

That is all, can't think of more relevant details.

private static void sortSearchResults(List<Map> l){
        Comparator<Map> comp = new Comparator<Map>(){
            public int compare(Map a,Map b){
                int aa=0,ba=0,as=0,bs=0;
                try{
                    aa = Integer.parseInt(""+a.get("activity"));

                }catch(Exception ex){
                }
                try{
                    ba = Integer.parseInt(""+b.get("activity"));
                }catch(Exception ex){
                }
                try{
                    as = Integer.parseInt(""+a.get("searchscore"));

                }catch(Exception ex){
                }
                try{
                    bs = Integer.parseInt(""+b.get("searchscore"));
                }catch(Exception ex){
                }


                if(as>bs)
                    return -1;
                else if(bs<as)
                    return 1;
                else{
                    if(aa>ba)
                        return -1;
                    else if(aa<ba)
                        return 1;
                    else
                        return 0;
                }

            }
            public boolean equals(Object o){
                return o==this;
            }
        };
        Collections.sort(l,comp);
    }
有帮助吗?

解决方案

if(as>bs)
    return -1;
else if(bs<as)
    return 1;

as>bs and bs<as mean exactly the same thing. You probably meant:

if(as<bs)
    return -1;
else if(as>bs)
    return 1;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top