Java中对ArrayList中POJO的排序

应用场景

假如现在在程序中有十个学生对象,这十个对象都放在一个ArrayList中,我们要根据每个Person的年龄从小到大进行排序。或者说,我们要将年龄大于15的Person放到ArrayList的前面部分。如果没有了解过Java为我们提供的Collections.sort(List list)方法,我们可能就要将年龄取出,再做一系列的比较…最恶心的是,还要将取出的年龄跟之前的学生对象保持联系,以达成对学生对象的排序。

但是,Java提供了帮助我们在List中排序POJO的方法,下面来看看如何使用。

确定排序规则,POJO实现Comparable接口

第一步,我们要明确排序规则,我这里是以年龄从小到大排序。

明确了规则之后,让POJO类实现Comparable接口,实现接口中的compareTo(Object o)方法。

  • 如果当前对象与传入对象相比,年龄大于传入的对象,则返回1,表示当前对象要放在传入对象的后面。

  • 如果年龄小于传入对象,返回-1,表示当前对象要放在传入对象的前面。

  • 如果年龄相等,返回0,表示不做对比,不改变位置。

Person.java


public class Person implements Comparable<Person> {
    private String name;
    private String gender;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return name + ":" + age;
    }
    public Person(String name, String gender, int age) {
        super();
        this.name = name;
        this.gender = gender;
        this.age = age;
    }
    @Override
    public int compareTo(Person o) {
        if(this.age > o.getAge()){
            return 1;
        }else if(this.age < o.getAge()){
            return -1;
        }
        return 0;
    }

}

调用Collection.sort(List list)方法

调用Collections.sort(List list)方法,传入包含Person对象的List,进行排序。

测试排序:

import java.util.ArrayList;
import java.util.Collections;

public class ListSort {
    public static void main(String[] args) {
        ArrayList<Person> al = new ArrayList<Person>();
        al.add(new Person("Tom","F",18));
        al.add(new Person("Tommy","M",16));
        al.add(new Person("Obas","F",19));
        al.add(new Person("Mushell","F",22));
        al.add(new Person("Canvs","F",21));
        al.add(new Person("Nexus","F",13));
        System.out.println(al.toString());
        Collections.sort(al);
        System.out.println("After sorted:");
        System.out.println(al.toString());

    }
}

结果

[Tom:18, Tommy:16, Obas:19, Mushell:22, Canvs:21, Nexus:13]
After sorted:
[Nexus:13, Tommy:16, Tom:18, Obas:19, Canvs:21, Mushell:22]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值