排序是编程中经常要碰到的问题,如果只是一般的数据库数据那么我们完全可以用数据sql语言来排序,但有的时候情况并不是这样,在一些特殊情况下我们不得不自己在java中写一些排序,而通常排序是一件让程序员非常恼火的事情,特别是那些可以让用户自由选择排序规则的情况,想想就头疼.今天正好公司一个组件就碰到了这样的情况,下面我说一下怎么来完成并且实现排序.
首先让我们来看一下用户需求是怎么样(为了更容易理解我将用户需求简化了一下,实际情况可能更复杂), 一个财务人员需要查询公司内所有用户的数据信息,对于查询出来的结果该用户能够自己定义排序规则(例如,他希望对用户姓名进行升序,同时对工资进行降序, 并且对生日进行升序,也许有人会说这个直接用sql就能完成,请注意,这个用例是我简化了的,真实的情况会非常复杂,同时并不是一条sql就能解决的).
对于这个需求我们第一个想到的应该有一个员工信息对象(Employee),用户姓名,工资,生日都是这个对象的属性.用户的查询结果就是 Employee对象的List.我们知道java本身提供了一个非常好的对于List的排序方法Collections.srot(List
下面我们来看一下具体代码:
Employee对象,一个标准的javabean对象,实际情况可能会是一个更加复杂的对象
/** */ /**
*
*/
package com.demo.sort;
import java.math.BigDecimal; import java.util.Date;
/** */ /**
*
*/
public class Employee ... {
private Long employeeId;
private String firstName;
private String lastName;
private Date birthday;
private BigDecimal payment;
public Date getBirthday() ... {
return birthday;
}
public void setBirthday(Date birthday) ... { this .birthday = birthday;
}
public Long getEmployeeId() ... {
return employeeId;
}
public void setEmployeeId(Long employeeId) ... { this .employeeId = employeeId;
}
public String getFirstName() ... {
return firstName;
}
public void setFirstName(String firstName) ... { this .firstName = firstName;
}
public String getLastName() ... {
return lastName;
}
public void setLastName(String lastName) ... { this .lastName = lastName;
}
public BigDecimal getPayment() ... {
return payment;
}
public void setPayment(BigDecimal payment) ... { this .payment = payment;
}
@Override
public int hashCode() ... {
// TODO Auto-generated method stub
return super .hashCode();
}