Java 根据自己需求重写排序方法

   在develop code 过程中,我们往往要根据需求对一组数据进行排序,当然frontend可以依靠js进行排序,这里要说的是在backend怎样进行排序:

   在后端进行排序,我们需要用到Collections类的sort方法,如果只是对一组数字、字母排序,可以直接使用Collections.sort(List<?> list),默认是ASC升序。如果是对一组自己定义的复杂的数组排序,就要重写Comparator进行重写了。

   看下面一个示例:

    private final Comparator<T> idAsc = new Comparator<T>() {

@Override

public int compare(T t1, T t2) {

return (int)(t1.getId() - t2.getId());

}

};

   这是一个按类T的id进行的升序排列,如果要降序排列,只需要换一下顺序进行了:    

    private final Comparator<T> idDesc = new Comparator<T>() {

@Override

public int compare(T t1, T t2) {

return (int)(t2.getId() - t1.getId());

}

};

   使用方法:

    Collections.sort(List<T> list, Comparator comparator);


   上面的例子只是一个比较简单的自定义排序,但在现实过程当中,可能我们需要按照多个条件进行排序。看下面的例子:

   先根据数量num排序,如果num相同再根据id进行排序

    public final Comparator<T> numAndIdAsc = new Comparator<T>() {

@Override

public int compare(T t1, T t2) {

int numDiff= t1.getNumber() - t2.getNumber();

int idDiff= t1.getId() - t2.getId();

if(numDiff== 0) {

return idDiff;

} else {

if(idDiff < 0) return -1;

else return 1;

}

}

};

   上面这个例子是按照两个条件进行的升序排列,如果要降序排列,换一下比较的顺序就行了。

   

   如果是要按照两个以上条件进行排序,按照上面例子的逻辑进行细化排序就行了。

你可能感兴趣的:(Collections,sort,comparator)