排序-List排序

200 阅读1分钟

解决方法

要自己实现比较方法。

有两种方法,都差不多,就是实现接口。

一种是在实体类实现方法,一种是在新的类实现方法。

然后,使用的时候,分别对应着,一种是List.sort(比较器),一种是Collections.sort(集合, 比较器)。

解决方法-List.sort()

@ApiOperation("根据员工id,查询所有数据")
	@RequestMapping(value="/getEmployeeSalarysByEmployeeId", method = RequestMethod.GET)
	public RespBean<EmployeeSalary> getEmployeeSalarysByEmployeeId(Integer employeeId) {
		//视图需要的数据
		List<EmployeeSalaryVo> employeeSalaryVos = new ArrayList<EmployeeSalaryVo>();
		
		//工资集合
		List<EmployeeSalary> employeeSalarys = employeeSalaryService.getAllEmployeeSalarysByEmployeeId(employeeId);	
		for (int i = 0; i < employeeSalarys.size(); i++) {
			EmployeeSalaryVo employeeSalaryVo = new EmployeeSalaryVo();
			employeeSalaryVo.setDate(employeeSalarys.get(i).getSalaryDate());
			employeeSalaryVo.setReason(employeeSalarys.get(i).getReason());
			employeeSalaryVo.setSalaryBase(employeeSalarys.get(i).getSalaryBase());
			employeeSalaryVo.setSalaryPerformance(employeeSalarys.get(i).getSalaryPerformance());
			employeeSalaryVo.setSalaryType(1);
			employeeSalaryVos.add(employeeSalaryVo);
		}
		
		//合同集合
		List<EmployeeContract> employeeContracts = employeeContractService.getAllEmployeeContractsByEmployeeId(employeeId);
		for (int i = 0; i < employeeContracts.size(); i++) {
			EmployeeSalaryVo employeeSalaryVo = new EmployeeSalaryVo();
			employeeSalaryVo.setDate(employeeContracts.get(i).getStartDate());
			employeeSalaryVo.setReason(employeeContracts.get(i).getReason());
			employeeSalaryVo.setSalaryBase(employeeContracts.get(i).getSalaryBase());
			employeeSalaryVo.setSalaryPerformance(employeeContracts.get(i).getSalaryPerformance());
			employeeSalaryVo.setSalaryType(0);
			employeeSalaryVos.add(employeeSalaryVo);
		}
		
		//排序
		Collections.sort(employeeSalaryVos);
		
		return RespBean.ok(employeeSalaryVos);
	}
package com.wz.bpm.vo;

import java.util.Date;

import io.swagger.annotations.ApiModelProperty;

public class EmployeeSalaryVo implements Comparable<EmployeeSalaryVo> { //直接在实体类里实现比较方法
	private Double salaryBase;
	public Double getSalaryBase() {
		return salaryBase;
	}
	public void setSalaryBase(Double salaryBase) {
		this.salaryBase = salaryBase;
	}
	public Double getSalaryPerformance() {
		return salaryPerformance;
	}
	public void setSalaryPerformance(Double salaryPerformance) {
		this.salaryPerformance = salaryPerformance;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	public String getReason() {
		return reason;
	}
	public void setReason(String reason) {
		this.reason = reason;
	}
	private Double salaryPerformance;
	private Date date;
	private String reason;
	
	@Override
	public int compareTo(EmployeeSalaryVo o) { //实现比较方法
		return this.getDate().compareTo(o.getDate()); //这里的具体比较代码复用了Date的比较方法,如果不能复用,就要自己实现。本质上是实现比较大小,然后返回值3个值:大于1,小于-1,等于0。
		
	}
	
	@ApiModelProperty(value="工资类型:1.调薪 0.合同")
	private Integer salaryType;
	public Integer getSalaryType() {
		return salaryType;
	}
	public void setSalaryType(Integer salaryType) {
		this.salaryType = salaryType;
	}
}

解决方法-Collections.sort()

package com.wz.bpm.vo;

import java.util.Comparator;

public class EmployeeSalaryVoComp implements Comparator<EmployeeSalaryVo>{ //新的类(需要专门创建新的比较器类)实现比较方法

	@Override
	public int compare(EmployeeSalaryVo o1, EmployeeSalaryVo o2) {
		// TODO Auto-generated method stub
		return 0;
	}

}

参考

www.51gjie.com/java/643.ht…