首页>JAVA>正文

Java中的Comparator比较器

时间:2018-01-12 11:49:36   来源:上海尚学堂   阅读:

Comparator的概念:

强行对某个对象 collection 进行整体排序 的比较函数,可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。
 
 
 
我们来认识他的用法 :
 

一.准备数据

首先我们准备下数据 一个Person类,重写equals方法
 

/**
 *@author  上海尚学堂 lisa老师
 * 了解更多加微信:java8733
 */
public class Pserson {

    private int  id;

    private String name;

    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Pserson pserson = (Pserson) o;

        return age == pserson.age;
    }

    @Override
    public int hashCode() {
        return age;
    }
}
 

二.提供排序规则

使用collenctions工具类提供一个比较器来实现按照年龄来排序

/**
 *@author  上海尚学堂 lisa老师
 * 了解更多加微信:java8733
 */
public static void main(String[] args) {

    List<Pserson> list = new ArrayList<>();

    Pserson p1 = new Pserson();
    p1.setName("zs");
    p1.setAge(14);
    list.add(p1);

    Pserson p2 = new Pserson();
    p2.setName("ls");
    p2.setAge(11);
    list.add(p2);

    Pserson p3 = new Pserson();
    p3.setName("ww");
    p3.setAge(18);
    list.add(p3);

    Collections.sort(list, new Comparator<Pserson>() {
        @Override
        public int compare(Pserson o1, Pserson o2) {
            return o1.getAge() - o2.getAge();
        }
    });

    for (Pserson p:list ) {
        System.out.println(p);
    }
}
 

三.执行结果

 
 
简单分析:
我们能够排序主要是根据比较器的输出结果作为判断
Collections.sort(list, new Comparator<Pserson>() {
    @Override
    public int compare(Pserson o1, Pserson o2) {
        return o1.getAge() - o2.getAge();
    }
});
 
使用匿名内部类来实现排序集合,重写compare方法来实现重排的规则。上海尚学堂
分享:0

电话咨询

客服热线服务时间

周一至周五 9:00-21:00

周六至周日 9:00-18:00

咨询电话

021-67690939
15201841284

微信扫一扫