Collections.sort 排序:把对象集合中的值为“-”的对象放到集合最后面,以及Comparison method violates its general contract异常解决

我的对象集合结构: List>  valueList = ......

 

Collections.sort(valueList,new Comparator>(){

@Override

public int compare(HashMap o1,HashMap o2){

 String s1 = (String)o1.get(param.sortField());//按sortField字段排序

Double d1 = null;

if(!"-".equals(s1)){

    d1 = Double.valueOf(s1.replace("%",""));//值可能有百分号,去掉

}

 String s2 = (String)o2.get(param.sortField());//按sortField字段排序

Double d2 = null;

if(!"-".equals(s2)){

    d2 = Double.valueOf(s2.replace("%",""));//值可能有百分号,去掉

}

  if("asc".equals(param.getSort())){   //升序

//我开始缺少了下面这个if,报错:Comparison method violates its general contract异常

     if("-".equals(s1)&&"-".equal(s2)){

       return 0;

    }

  

if("-".equals(s1)&&!"-".equal(s2)){

       return 1;

    }

 

if(!"-".equals(s1)&&"-".equal(s2)){

       return -1;

    }

 

if(!"-".equals(s1)&&!"-".equal(s2)){

       return  d1.compareTo(d2);

    }

  }

 //下面是降序

  int i =1;

     //我开始缺少了下面这个if,报错:Comparison method violates its general contract异常

     if("-".equals(s1)&&"-".equal(s2)){

       i = 0;

    }

  

if("-".equals(s1)&&!"-".equal(s2)){

       i = 1;

    }

 

if(!"-".equals(s1)&&"-".equal(s2)){

       i = -1;

    }

 

if(!"-".equals(s1)&&!"-".equal(s2)){

       i = d2.compareTo(d1);

    }

return i;

}

});

 

 

 

你可能感兴趣的:(java)