1.概述:
最近在对信息进行排序时,做了一个简单地比较器,当时在运行时并没有报错,但是,后台数据刷新时,我这边就出了问题。在jdk1.6中,当我们比较的内容的值相同时,使用java自己的排序方法"Collections.sort()"是很正常的,可是到了jdk1.7,问题就会出现了,这种情就不再允许了,这是因为JDK7底层的排序算法换了,JDK7中的Collections.Sort方法实现中要求,如果两个值是相等的,那么compare方法需要返回0,否则 可能 会在排序时抛错(这个异常并不是频繁出现的),而JDK6是没有这个限制的。所以在比较时,我们必须要考虑两个值相等的情况,而且返回的值需要为 0.
2.解决方法
如下代码,代码中8~9行增加了一句判断两个对象的值是否相同的语句,注意第9行,要求返回0(因为是判断值是否相同,相同的话要求返回0,且必须是0),否则可能会报出异常.
public class PinyinComparator implements Comparator<DeptAddBookBean> {
1.public int compare(DeptAddBookBean o1, DeptAddBookBean o2) {
2. if (o1.getLetter().equals("@") || o2.getLetter().equals("#")) {
3. return -1;
4. } else if (o1.getLetter().equals("#") || o2.getLetter().equals("@")) {
5. return 1;
6. } else if (o1.getLetter().compareTo(o2.getLetter())>0) {
7. return 1;
8. }else if(o1.getLetter().compareTo(o2.getLetter())==0){
9. return 0;//此处需要返回0;
10. }else {
11. return -1;
12. }
13 . }
}
如上添加一句判断两个值相等的情况后,在调用Collections.sort(list,new PinyinComparator());方法进行排序,避免出现异常.