java:List自定义排序

通过实现Comparable<T>接口,重写POJOcompareTo(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

猜你喜欢

转载自blog.csdn.net/ducklikejava/article/details/77836192
今日推荐