Java:对象排序

来源:互联网 发布:长春玛雅软件培训 编辑:程序博客网 时间:2024/06/07 05:12

需求

在实际项目开发中,我们经常会遇到需要通过 Java 对象的某一属性对其进行排序的需求。于是查找了相关资料,发现实现起来并不复杂,可以使用 Java 本身提供的两种接口来实现,接口如下:

  • java.lang.Comparable
  • java.util.Comparator

实现

java.lang.Comparable 接口

java.lang.Comparable 接口有一个 compareTo(Object o) 方法,我们只需要重写此方法即可。代码如下:

public class People implements Comparable<People> {    private String name;    private int age;    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;    }    /*     * 根据 age 做比较,如果该对象小于 people,返回 -1;等于 people,返回 0;大于 people,返回 1。     */    @Override    public int compareTo(People people) {        if(age < people.getAge()){            return -1;        }        if(age > people.getAge()){            return 1;        }        return 0;    }} 测试代码:public class Test {    public static void main(String[] args) {        People xz = new People();        xz.setName("小张");        xz.setAge(20);        People xl = new People();        xl.setName("小李");        xl.setAge(23);        People xw = new People();        xw.setName("小王");        xw.setAge(18);        People xc = new People();        xc.setName("小陈");        xc.setAge(18);        List<People> peoples = new ArrayList<People>();        peoples.add(xz);        peoples.add(xl);        peoples.add(xw);        peoples.add(xc);        System.out.println("排序前:");        for (People people : peoples) {            System.out.println("name = " + people.getName() + " age = " + people.getAge());        }        // 排序        Collections.sort(peoples);        System.out.println("排序后:");        for (People people : peoples) {            System.out.println("name = " + people.getName() + " age = " + people.getAge());        }    }}输出结果:排序前:name = 小张 age = 20name = 小李 age = 23name = 小王 age = 18name = 小陈 age = 18排序后:name = 小王 age = 18name = 小陈 age = 18name = 小张 age = 20name = 小李 age = 23

java.util.Comparator 接口

java.util.Comparator 接口有一个 compare(Object o1, Object o2) 方法,我们只需要重写此方法即可。代码如下:

public class People {    private String name;    private int age;    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;    }}public class PeopleCompare implements Comparator<People> {    /*     * 根据 age 做比较,如果 p1 小于 p2,返回 -1;等于 p2,返回 0;大于 p2,返回 1。     */    @Override    public int compare(People p1, People p2) {        if (p1.getAge() < p2.getAge()) {            return -1;        }        if (p1.getAge() > p2.getAge()) {            return 1;        }        return 0;    }}测试代码:public class Test {    public static void main(String[] args) {        ....        Collections.sort(peoples, new PeopleCompare());//只有这里不一样,其他代码同上        ....}输出结果:排序前:name = 小张 age = 20name = 小李 age = 23name = 小王 age = 18name = 小陈 age = 18排序后:name = 小王 age = 18name = 小陈 age = 18name = 小张 age = 20name = 小李 age = 23

结论

这两种方法都可以实现按照对象的属性进行排序,但是方法二相对于方法一来说更为符合 OOP 的设计原则。因为方法二不修改 JavaBean,且方便扩展。

0 0
原创粉丝点击