在日常开发中,很多时候都需要对一些数据进行排序的操作。然而那些数据一般都是放在一个集合中如:Map ,Set ,List 等集合中。他们都提共了一个排序方法 sort(),要对数据排序直接使用这个方法就行,但是要保证集合中的对象是 可比较的。
怎么让一个对象是 可比较的,那就需要该对象实现 Comparable 接口啦。然后重写里面的
compareTo()方法。我们可以看到Java中很多类都是实现类这个接口的 如:Integer,Long 等等。。。
下面举一个例子
首先我们定义一个实体类
重写compareTo方法 根据status排序
public class Test implements Comparable {
//姓名
private String name;
//状态
private Integer status;
public Integer getStatus() {
return status;
}
/**
* 按status排序
*
* @param o
* @return
*/
@Override
public int compareTo(Object o) {
if (o instanceof Test) {
Test test = (Test) o;
if (this.status == 0 || this.status == null || test.getStatus() == 0 || test.getStatus() == null) {
return 0;
}
return status.compareTo(test.getStatus());
}
return 0;
}
}
}
这里说一下重写的 public int compareTo(Student o){} 这个方法,它返回三种 int 类型的值: 负整数,零 ,正整数。
具体可以看compareTo的底层实现
现在比如你的业务层中使用到了这个对象集合
public static void main(String[] args) {
List<Test> list = new ArrayList<>();
list.add(new Test("A", 25));
list.add(new Test("B", 21));
list.add(new Test("C", 18));
list.add(new Test("D", 32));
list.add(new Test("E", 36));
list.add(new Test("F", 16));
System.out.println("排序前:");
for (Test test : list) {
System.out.println(test.toString());
}
//使用默认排序
Collections.sort(list);
System.out.println("默认排序后:");
for (Test test : list) {
System.out.println(test.toString());
}
}
排序前:
Test { status=25, name='A'}
Test { status=21, name='B'}
Test { status=18, name='C'}
Test { status=32, name='D'}
Test { status=36, name='E'}
Test { status=16, name='F'}
默认排序后:
Test {status=16, name='F'}
Test {status=18, name='C'}
Test {status=21, name='B'}
Test {status=25, name='A'}
Test {status=32, name='D'}
Test {status=36, name='E'}