list实现根据某一个字段排序

对于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
          }
        ],
经验分享 程序员 微信小程序 职场和发展