private void sortScene(Movie m){
if(m != null){
m.getSceneList().addAll(m.getScenes());
//Sort the Scene List
Collections.sort(m.getSceneList());
}
}
因为Movie实体里面的private Set<Scene> scenes = new HashSet<Scene>(0);是Set集合,所以没有重复的元素。
private List<Scene> sceneList = new ArrayList<Scene>(0); 有因为Collections.sort(List list)里面需要List,
所以就构造了sceneList这个参数。
Scene实体要实现Comparable接口,所以必须实现其中的方法。
public class Scene extends BaseEntity implements Comparable<Scene>{
public int compareTo(Scene o) {
int ret = this.seq == null ? (o.seq == null ? 0 : -1): (o.seq == null ? 1 : (this.seq==0?(o.seq==0?0:1):(o.seq == 0?-1:(this.seq - o.seq))));
if (ret == 0) {
return this.getId().compareTo(o.getId());
} else {
return ret > 0 ? 1 : -1;
}
}
}
上面是当seq=0的时候需要排列在最后面而已,所以有了上面的排序代码。通用的代码如下:
public int compareTo(Scene o) {
int ret = this.seq==null?(o.seq==null?0:-1):(o.seq==null?1:(this.seq - o.seq));
if(ret == 0)
{
return this.getId().compareTo(o.getId());
}else{
return ret>0?1:-1;
}
}
要充分理解排序就必须先理解最后的return 0, -1 , 1 这三个数字代表的含义。它们不是代表数字而是代表前面和后面要比较的值哪个大哪个小?如果是0表示要比较的这两个数字相等。如果是1表示前面数字大,如果-1表示前面数字小。要理解这个就没问题了。
在写这个比较规则的时候,千万不要想着套数字进去来进行比较,就想着前面数字和后面数字比较,如果前面大就return 1,否则return -1.