- 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这个参数。
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 ;
- }
- }
- }
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 ;
- }
- }
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.