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
          }
        ],
  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值