本帖最后由 大山哥哥 于 2017-8-28 14:04 编辑
在我们日常java工作开发中,排序是一个比较常见的需求点,有的时候会对字符串、数组、日期等进行排序,都比较简单,但是如何对对象按照一定规则进行排序,则相对比较复杂,下面,简单说明一下java中接口Comparator所提供的比较排序方案。 假设一个场景:
公司人员管理中,需要在前台展示的时候对人员进行排序显示,年龄越大,排序越靠前。
首先,准备一个简单的实体类 User
[Java] 纯文本查看 复制代码 public class User {
private String name;
private Integer age;
public User() {
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
//省略get set 方法
}
第二,准备好测试数据
[Java] 纯文本查看 复制代码 private static List<User> getOrigUser() {
//准备很多人员--姓名后面的数组为了排序显示方便
User user1 = new User("王大哈21", 21);
User user2 = new User("王二哈45", 45);
User user3 = new User("王三哈23", 23);
User user4 = new User("王四哈30", 30);
User user5 = new User("王五哈28", 28);
User user6 = new User("王六哈20", 20);
List<User> users = new ArrayList<User>();
users.add(user1);
users.add(user2);
users.add(user3);
users.add(user4);
users.add(user5);
users.add(user6);
//users是我们拿到的初始的数据,
return users;
}
第三步,准备自定义比较器,做比较处理
[Java] 纯文本查看 复制代码 //java.util.Comparator
public class MyUserComparator implements Comparator<User>{
/**
* 在该方法中,可以自行定义其他复杂的比较
* 比如年龄相同,如果有性别,女性可以排序靠前等
*/
@Override
public int compare(User user1, User user2) {
//年龄顺序排列
//return user1.getAge() - user2.getAge();
//年龄倒序排列
return user2.getAge() - user1.getAge();
}
}
第四步,测试。使用Arrays的sort方法进行排序。
[Java] 纯文本查看 复制代码 public static void main(String[] args) {
//获得原始数据
List<User> users = getOrigUser();
//将集合转成数组
User[] array = users.toArray(new User[0]);
//排序
Arrays.sort(array,new MyUserComparator());
//打印结果
for (User user : array) {
System.out.println(user.getName());
}
}
结果如下:
[Java] 纯文本查看 复制代码 王二哈45
王四哈30
王五哈28
王三哈23
王大哈21
王六哈20
本次demo仅仅是做了一个简单的排序测试,但是要想抽取成工具类,则需要重构自定义Comparator。 |