一:对集合排序
对以下的数据做展示顺序排序:未接单>预接单>已接单。(注意里面有俩条一样的数据数据哦)
/**
 * @author 张子行
 * @class
 */
      	users.add(new User(1, "未接单"));
        users.add(new User(2, "已接单"));
        users.add(new User(3, "预接单"));
        users.add(new User(4, "已接单"));
        users.add(new User(5, "未接单"));
        users.add(new User(6, "已接单"));
        users.add(new User(7, "未接单"));
        users.add(new User(8, "预接单"));
        users.add(new User(9, "未接单"));
        users.add(new User(10, "已接单"));
        users.add(new User(11, "未接单"));
        users.add(new User(12, "已接单"));
        users.add(new User(13, "预接单"));
        users.add(new User(14, "未接单"));
        users.add(new User(15, "预接单"));
        users.add(new User(14, "未接单"));方法一:Collections.sort+Comparator
Comparator接口返回值(正数:正在排序的数排后面 、0:原样输出 、 负数:正在排序的数排前面)
对User类型的数据排序:
先对未接单,与其他的状态做一个排序
 如果o1是未接单,o2是别的状态,return -1,o1排前面。
 如果o1是别的状态,o2是未接单,return 1,o1排后面。
接着对预接单,与其他的状态进行排序
 如果o1是预接单,o2是别的状态,return -1,o1排前面。
 如果o1是别的状态,o2是预接单,return 1,o1排后面。
其他的情况原样输出
/**
 * @author 张子行
 * @class
 */
Collections.sort(users, new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                if ("未接单".equals(o2.getName())&&("预接单".equals(o1.getName()) || "已接单".equals(o1.getName()))) {
                    return 1;
                }
                if ("未接单".equals(o1.getName())&&("预接单".equals(o2.getName()) || "已接单".equals(o2.getName()))) {
                    return -1;
                }
                if ("预接单".equals(o1.getName())) {
                    return -1;
                }
                if ("预接单".equals(o2.getName())) {
                    return 1;
                }
                return 0;
            }
        });这样就完成了排序需求咯,但是不能对相同的数据进行去重,仅仅是排序而已。
方法二:TreeSet+compareTo
TreeSet可以去重的同时在添加的时候就进行好了排序。TreeSet添加对象时此对象必须要实现Comparable<?>接口,进而实现compareTo方法,然后就可以自定义排序规则咯。
@Override
 public int compareTo(User o): 
 参数o: 正在添加的元素
 return 0 TreeSet会认为此时添加的对象是同一个对象,然后就添加不进去。
 return 一个正数,都能添加到集合当中,参数o排前面
 return 一个负数,都能添加到集合当中,参数o排后面
测试数据不变,改造User类即可。省略set、get方法,当正在添加的元素的id,TreeSet中已经有了的时候,那么return 0,就达到去重的目的了。另外最好重写一下equals和hashCode方法。
/**
 * @author 张子行
 * @class
 */
    private int id;
    private String name;
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof User)) return false;
        User user = (User) o;
        return getId() == user.getId() &&
                Objects.equals(getName(), user.getName());
    }
    @Override
    public int hashCode() {
        return Objects.hash(getId(), getName());
    }
    /**
     * @param
     * @method 正在添加的元素(o)与TreeSet中已经存在的元素(this)进行比较
     * 按照
     */
    @Override
    public int compareTo(User o) {
        if ("未接单".equals(o.getName()) && ("预接单".equals(this.getName()) || "已接单".equals(this.getName()))) {
            return 1;
        }
        if ("未接单".equals(this.getName()) && ("预接单".equals(o.getName()) || "已接单".equals(o.getName()))) {
            return -1;
        }
        if ("预接单".equals(o.getName()) && "已接单".equals(this.getName())) {
            return 1;
        }
        if ("预接单".equals(this.getName()) && "已接单".equals(o.getName())) {
            return -1;
        }
        return this.getId() - o.getId();
    }
    public User() {
    }
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }二:测试
杂乱的数据,就被排好顺序输出来了


测试代码链接
本文测试代码
                










