java:List自定义排序

99 篇文章 2 订阅
18 篇文章 0 订阅

通过实现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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以使用Collections.sort()方法对List进行排序,也可以使用Comparator接口自定义排序规则。 1. 使用Collections.sort()方法排序 使用Collections.sort()方法排序需要实现Comparable接口,重写compareTo()方法,示例如下: ```java public class Person implements Comparable<Person> { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public int compareTo(Person p) { // 按照年龄升序排序 return this.age - p.age; } } ``` 然后使用Collections.sort()方法对List进行排序: ```java List<Person> personList = new ArrayList<>(); personList.add(new Person("Tom", 20)); personList.add(new Person("Jerry", 18)); personList.add(new Person("Mike", 22)); Collections.sort(personList); for (Person p : personList) { System.out.println(p.getName() + " " + p.getAge()); } ``` 输出结果为: ``` Jerry 18 Tom 20 Mike 22 ``` 2. 使用Comparator接口自定义排序规则 如果需要自定义排序规则,可以使用Comparator接口,实现compare()方法,示例如下: ```java public class PersonComparator implements Comparator<Person> { @Override public int compare(Person p1, Person p2) { // 按照年龄降序排序 return p2.getAge() - p1.getAge(); } } ``` 然后使用Collections.sort()方法和自定义的Comparator对List进行排序: ```java List<Person> personList = new ArrayList<>(); personList.add(new Person("Tom", 20)); personList.add(new Person("Jerry", 18)); personList.add(new Person("Mike", 22)); Collections.sort(personList, new PersonComparator()); for (Person p : personList) { System.out.println(p.getName() + " " + p.getAge()); } ``` 输出结果为: ``` Mike 22 Tom 20 Jerry 18 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值