通过实现Comparable<T>
接口,重写POJO
的compareTo(T other)
方法实现排序。
比如:某个
List
的排序需要根据其中POJO
的某个字符串类型字段是否匹配特定字符串,进行降序排列:
代码如下:
/**
* Created by cat on 2017/9/4.
*/
public class LockInfo implements Comparable<LockInfo> {
public String packageName;
// {0:none, 1:iris, 2:face, 3:finger, 4:pattern, 5:number, 6:mixed}
public int lockMode;
public boolean unlock; // default is close --> false
public String appName; // not in db !
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
LockInfo info = (LockInfo) o;
return packageName != null ? packageName.equals(info.packageName) : info.packageName == null;
}
@Override
public int hashCode() {
return packageName != null ? packageName.hashCode() : 0;
}
@Override
public String toString() {
return "LockInfo{" +
"packageName='" + packageName + '\'' +
", lockMode=" + lockMode +
", appName='" + appName + '\'' +
'}';
}
@Override
public int compareTo(LockInfo other) {
if (this.packageName.equals("wx") && !other.packageName.equals("wx")) {
return -2; // a>b
} else if (!this.packageName.equals("wx") && other.packageName.equals("wx")) {
return 2; // b<a :这个很重要,不仅仅要让 a>b ,还要让 b<a .
}
if (this.packageName.equals("bank") && !other.packageName.equals("bank")) {
return -1; // a>b
} else if (!this.packageName.equals("bank") && other.packageName.equals("bank")) {
return 1;// b<a
}
return this.packageName.compareTo(other.packageName);
}
}
// ######################################################
/**
* Created by cat on 2017/9/4.
*/
public class MainTest {
public static void main(String[] args) {
ArrayList<LockInfo> infos = new ArrayList<>();
{
LockInfo in = new LockInfo();
in.packageName = "acs";
infos.add(in);
}
{
LockInfo in = new LockInfo();
in.packageName = "bank";
infos.add(in);
}
{
LockInfo in = new LockInfo();
in.packageName = "wx";
infos.add(in);
}
{
LockInfo in = new LockInfo();
in.packageName = "bbc";
infos.add(in);
}
{
LockInfo in = new LockInfo();
in.packageName = "00123";
infos.add(in);
}
{
LockInfo in = new LockInfo();
in.packageName = "7778";
infos.add(in);
}
{
LockInfo in = new LockInfo();
in.packageName = "zzzz";
infos.add(in);
}
{
LockInfo in = new LockInfo();
in.packageName = "比亚迪";
infos.add(in);
}
Collections.sort(infos);
System.out.println("size= " + infos.size() );
infos.forEach(System.out::println);
}
}
输出如下:
size= 8
LockInfo{packageName='wx', lockMode=0, appName='null'}
LockInfo{packageName='bank', lockMode=0, appName='null'}
LockInfo{packageName='00123', lockMode=0, appName='null'}
LockInfo{packageName='7778', lockMode=0, appName='null'}
LockInfo{packageName='acs', lockMode=0, appName='null'}
LockInfo{packageName='bbc', lockMode=0, appName='null'}
LockInfo{packageName='zzzz', lockMode=0, appName='null'}
LockInfo{packageName='比亚迪', lockMode=0, appName='null'}
Process finished with exit code 0