对于Java针对于数组和List的排序的实现都已经封装好了方法,我们只需要调用方法就可以。
针对于数组只需要使用Arrays.sort就可以实现,本文主要讨论在list的情况下就行排序,实际开发中可能需要把list的试题集合根据某一个字段排序,下面就来介绍list的排序。
1.要想实现排序首先要确保list里面的元素是相同数据类型。
以下演示有一个ExamStudentAddress实体,按照实体里面的code排序。
//首先继承Comparable方法,并重写CompareTo方法
public class ExamStudentAddress implements Comparable<ExamStudentAddress> {
@ApiModelProperty("区域编码")
private Integer code;
@ApiModelProperty("地址")
private String address;
@ApiModelProperty("学员id")
private Integer examStudentId;
//省略get set方法
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
通过重写Comparable接口的compareTo方法,可以让程序按照我们想要的排列方式进行排序,如:这里我按照code属性升序排序。
@Override
public int compareTo(ExamStudentAddress o) {
return this.getCode().compareTo(o.getCode()); //定义你自己的排序规则
}
}
2.重写完compareTo方法后就可以使用Collections.sort()方法了。
因为我们在实体类里面已经定义好了排序规则,直接使用sort排序就好。
//排序,examStudent.getListAddress()是我查询出来的数据,也是ExamStudentAddress实体的list
Collections.sort(examStudent.getListAddress());
这样就可以出来排序的结果。
3.如果没重写compareTo方法,可以按照下面执行。
在service层调用方法。
examStudent.getListAddress()是我查询出来的数据,也是ExamStudentAddress实体的list,现在我给放在List里面。
List<ExamStudentAddress> examStudentAddress = examStudent.getListAddress();
Collections.sort(examStudentAddress, new Comparator<ExamStudentAddress>() {
@Override
//按照code的大小升序排列
public int compare(ExamStudentAddress o1, ExamStudentAddress o2) {
if (o1.getCode()>o2.getCode()) {
return 1;
}
if (o1.getCode()==o2.getCode()) {
return 0;
}
return -1;
}
});
//因为examStudent.getListAddress(); 是我封装在examStudent的一个list,所以排序完之后我要把排序后的list返回去,直接set到examStudent的listAddress就好了。
examStudent.setListAddress(examStudentAddress);
4.执行结果。
下图展示的是排序后的结果,
"listAddress": [
{
"id": 9,
"code": 370000,
"address": "山东省",
"examStudentId": 1358
},
{
"id": 10,
"code": 370100,
"address": "济南市",
"examStudentId": 1358
},
{
"id": 11,
"code": 370102,
"address": "历下区",
"examStudentId": 1358
},
{
"id": 12,
"code": 370102001,
"address": "解放路街道",
"examStudentId": 1358
}
],