前言:
关于Java中的排序,我们常见的就是对Array、List进行排序,对于Array,我们可以使用Arrays.sort(数组)进行排序;对于List,我们可以使用Collections.sort(list)进行排序,如果是需要对一个实体类的对象进行排序呢?
Comparator接口有一个comparTo(Object o)方法,它返回整数类型。对于表达式x.compareTo(y),如果返回值为0,则表示x和y相等,如果返回值大于0,则表示x大于y,如果返回值小于0,则表示x小于y;这是一个比较器接口。
因此,我们可以通过实现Comparator接口的compareTo方法对对象进行排序;
根据汉字首字母排序并进行分组 请移步这里 https://blog.csdn.net/Muscleheng/article/details/82666166
需求:有一个人员类,需要对其进行排,排序规则有:根据id排序、根据姓名排序、根据年龄排序;
第一步:创建一个人员类
package com.sort;
public class Person {
// id
private String id;
// 姓名
private String name;
// 年龄
private String age;
/**
* 初始构造方法
* @param id 编号
* @param name 姓名
* @param age 年龄
*/
public Person(String id,String name,String age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
第二步:写一个排序的方法并调用
package com.sort;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
public class Test {
public static void main(String[] args) {
Person person1 = new Person("1001","cccc", "22");
Person person2 = new Person("1002","aaaa", "23");
Person person3 = new Person("1003","bbbb", "21");
// 把对象添加到list集合里面
List<Person> list = new LinkedList<Person>();
list.add(person3);
list.add(person1);
list.add(person2);
System.out.println("排序前:");
for (Person person : list) {
System.out.println(person.toString());
}
System.out.println("\n排序后(按id排序):");
for (Person person : Test.personSort(list, "id")) {
System.out.println(person.toString());
}
}
/**
* 对Person对象进行排序
* @param list 排序对象的集合
* @param param 排序规则参数(id:根据 id 排序,name:根据 姓名 排序,age:根据 年龄 排序)
* @return 返回排序完成后的对象
*/
public static List<Person> personSort(List<Person> list,final String param) {
Collections.sort(list, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
// 根据 id 排序
if ("id".equals(param)) {
//System.out.println(p1.getId().compareTo(p2.getId()));
return p1.getId().compareTo(p2.getId());
}
// 根据 name 排序
if ("name".equals(param)) {
return p1.getName().compareTo(p2.getName());
}
// 根据 age 排序
if ("age".equals(param)) {
return p1.getAge().compareTo(p2.getAge());
}
// 否则不进行排序
return 0;
}
});
return list;
}
}
其中,我们通过传入不同的参数实现不同的排序规则;
排序结果展示:
Person person1 = new Person("1001","cccc", "22");
Person person2 = new Person("1002","aaaa", "23");
Person person3 = new Person("1003","bbbb", "21");
一、按照id排序结果:
二、按照name排序结果:
三、按照age排序结果:
从排序结果可以看出,我们已经实现了我们想要的排序结果;