Collections.sort(list1, new Comparator<Map>() {
public int compare(Map o1, Map o2) {
if ((o1.get("e_code") == null && o2.get("e_code") == null) || ("".equals(o1.get("e_code")) && "".equals(o2.get("e_code"))) ){
return 0;
}
if (o1.get("e_code") == null || "".equals(o1.get("e_code"))){
return 1;
}
if (o2.get("e_code") == null || "".equals(o2.get("e_code"))){
return -1;
}
Integer e_code1 = Integer.valueOf(o1.get("e_code").toString()) ;
Integer e_code2 = Integer.valueOf(o2.get("e_code").toString()) ;
return e_code1.compareTo(e_code2);
}
});
按照list1的map中e_code字段的大小进行排序,从小到大,并且当此字段为空时排到最后,比较两个map中字段值时当o1大于o2时返回1,o1小于o2时返回-1,当两个值相等时返回0;
系统使用了一阵子后,突然有一天排序这里出了问题,通过研究对代码进行了修改,此段代码为:
Collections.sort(list1, new Comparator<Map>() {
public int compare(Map o1, Map o2) {
if ((null == o1.get("e_code") && null == o2.get("e_code")) || ("".equals(o1.get("e_code")) && "".equals(o2.get("e_code")))) {
return 0;
}
if ((null == o1.get("e_code") && "" .equals(o2.get("e_code")) ) || ("".equals(o1.get("e_code")) && null== o2.get("e_code"))) {
return 0;
}
if (null == o1.get("e_code") || "".equals(o1.get("e_code"))) {
return 1;
}
if (null == o2.get("e_code") || "".equals(o2.get("e_code"))) {
return -1;
}
Integer e_code1 = Integer.valueOf(o1.get("e_code").toString());
Integer e_code2 = Integer.valueOf(o2.get("e_code").toString());
return e_code1.compareTo(e_code2);
}
});
错误原因是当null和“”或“”与null进行比较的情况下会报错,所以添加了如下代码,表示null和“”比较时认为他们相等
if ((null == o1.get("e_code") && "" .equals(o2.get("e_code")) ) || ("".equals(o1.get("e_code")) && null== o2.get("e_code"))) {
return 0;
}