有时候从数据库中取出的数据不仅仅需要在数据库中用sql语句中的order by 因为这只适用于取值一次的时候,当你的list是两次或者以上从数据库取出的数据拼起来的时候,如果需要根据list里面某一属性去排序的话就需要用到Collections.sort排序
Comparator是个接口,可重写compare()及equals()这两个方法,如果是null的话,就是使用元素的默认顺序,如a,e,d,c,b,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的。
compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回-1、0或1。
equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。
temp.put("projectids", CtPmProjectService.me.getLoginProj());
temp.put("statuses", new String[]{"opened","dealed","cancel","lay","laid","verified","canceled"});
list = list(temp);//原始的list
if(IStr.isEmpty(ctPmBug.get("status")) || "dealing".equals(ctPmBug.getStr("status"))){
ctPmBug.put("execoprt",IKit.getLoginUser().getTitle());//这是在判断登录人身份
ctPmBug.put("status","dealing");//这个是我list里面的字段
list.addAll(list(ctPmBug));//往list里面增加其他符合要求的数据,这里可以看出list是由两部分组成
}
Collections.sort(list,new Comparator<CtPmBug>() {
@Override
public int compare(CtPmBug o1, CtPmBug o2) {
return o2.getInt("level").compareTo(o1.getInt("level"));//level是我list里面需要排序字段
}
});
这样就实现了最终的数据是按level这个字段排序的而不会受list是两部分影响,不然排序会先按照list先加进去的一部分根据level排序,后加进去的会在第一部分排完后在根据level排序