有一个场景,需要把一个乱序的列表按三个字段排序
用的地方:
public class A {
//每一个B是sheet里的一行
ArrayList<B> list = new ArrayList<B> ();
public static void main(String[] s ) {
A a = new A();
a.list.add(new B("a","c","子女"));
a.list.add(new B("a","c","主被"));
a.list.add(new B("a","c","子女"));
//a.list.add(new B("e","c","子女"));
//a.list.add(new B("e","c","主被"));
System.out.println(a.list);
Collections.sort(a.list);
System.out.println(a.list);
}
}
定义:
public class B implements Comparable<B> {
String[] params;
public B(String a , String b ,String c) {
this.params = new String[]{"","",""};
this.params[0] =a;
this.params[1] =b;
this.params[2] =c;
}
public String[] getParams() {
return params;
}
public void setParams(String[] params) {
this.params = params;
}
//重写compareTo函数
@Override
public int compareTo(B o) {
String this_zhubeiName_ID = this.getParams()[0] + this.getParams()[1];
String other_zhubeiName_ID = o.getParams()[0] + o.getParams()[1];
if (this_zhubeiName_ID.equals(other_zhubeiName_ID)) { //如果是同一家庭,比较 与主被关系
if (this.getParams()[2].equals( "主被") && ! o.getParams()[2].equals("主被")) {
return -1;
}else if (!this.getParams()[2].equals( "主被") && o.getParams()[2].equals("主被")) {
return 1;
}else {
return 0;
}
}else {
return this_zhubeiName_ID.compareTo(this_zhubeiName_ID);
}
}
//重写toString, 好用来看
@Override
public String toString() {
return this.params[0]+"_"+this.params[1]+"_"+this.params[2];
}
}
两处的重写,基础才是最重要