在一个应用管理的代码中遇到这个方法,用于List的排序,升序或者降序
Comparator是接口类,继承之后需要实现里面的方法
static class MyCom implements Comparator<MyData> {
@Override
public int compare(MyData o1, MyData o2) {
int res = 0;
int data1 = o1.getId();
int data2 = o2.getId();
String name1 = o1.getName();
String name2 = o2.getName();
res = data1 - data2;
if (res == 0) {
res = name2.compareTo(name1);
}
return res;
}
}
也可以写成
if (data1 > data2) {
res = 1;
} else if (data1 < data2) {
res = -1;
}
关于三个返回值:1、-1、0
我理解成o1和o2比较时,根据比较的关系式得到的排放顺序,1表示o1在后面,-1表示o1在前面,0表示按原有顺序
额外的,compareTo是从第一位开始比较,如果遇到不同的字符,则马上返回这两个字符的ascii值差值,返回值是int类型。compareToIgnoreCase比较则会不计大小写
实体类
static class MyData {
int id;
String name;
public MyData(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "id=" + id + ";" + "name=" + name;
}
}
操作代码
List<MyData> list = new ArrayList<hasda.MyData>();
MyData data0 = new MyData(1, "a");
list.add(data0);
MyData data1 = new MyData(3, "a");
list.add(data1);
MyData data2 = new MyData(2, "d");
list.add(data2);
MyData data3 = new MyData(1, "z");
list.add(data3);
Collections.sort(list, new MyCom());
System.out.println(list.toString());
}
结果为[id=1;name=z, id=1;name=a, id=2;name=d, id=3;name=a]
如果将res = data1 - data2;改成res = data2 - data1; 结果为[id=3;name=a, id=2;name=d, id=1;name=z, id=1;name=a]