java根据List内对象的属性排序

来源:互联网 发布:数据帧的结构 编辑:程序博客网 时间:2024/05/29 08:36

方法一:实现Comparator接口,并重写compare方法

  • 实体类代码:
import java.util.Comparator;/** * 学生类   方法一 * 实现Comparator接口 * 并重写compare方法 * @author liaot * */public class Student implements Comparator<Student>{    private String name; //姓名    private int age;  //年龄    //重写 比较方法  本次例子定义为按年龄比较    @Override    public int compare(Student o1, Student o2) {        if(o1.getAge() > o2.getAge()){            return 1;        }else{            return -1;        }    }    public Student(String name, int age) {        super();        this.name = name;        this.age = 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;    }}
  • 测试类:
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Main {    public static void main(String[] args) {        //初始化四个不同的学生        Student stu1 = new Student("路人甲", 20);        Student stu2 = new Student("路人已", 18);        Student stu3 = new Student("路人丙", 16);        Student stu4 = new Student("路人丁", 19);        //新建List把学生加进List        List<Student> stuList = new ArrayList<>();        stuList.add(stu1);        stuList.add(stu2);        stuList.add(stu3);        stuList.add(stu4);        System.out.println("排序前:=====");        for(Student stu :stuList){            System.out.println("姓名:"+stu.getName() +" 年龄"+stu.getAge());        }        //排序        Collections.sort(stuList, stu1);  //第一个参数为List 第二个参数为对象的一个实例        System.out.println("排序后:=====");        for(Student stu :stuList){            System.out.println("姓名:"+stu.getName() +" 年龄"+stu.getAge());        }    }}
  • 运行结果:
    这里写图片描述

方法二:实现Comparable接口 并重写compareTo方法

/** * 学生类 方法二  实现Comparable接口 并重写compareTo方法 *  * @author liaot * */public class Student2 implements Comparable<Student2> {    private String name; // 姓名    private int age; // 年龄    // 重写 比较方法 本次例子定义为按年龄比较    @Override    public int compareTo(Student2 stu) {        if (this.age > stu.getAge()) {            return 1;        } else {            return -1;        }    }    public Student2(String name, int age) {        super();        this.name = name;        this.age = 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;    }}
  • 测试类
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Main2 {    public static void main(String[] args) {        //初始化四个不同的学生        Student2 stu1 = new Student2("路人甲", 20);        Student2 stu2 = new Student2("路人已", 18);        Student2 stu3 = new Student2("路人丙", 16);        Student2 stu4 = new Student2("路人丁", 19);        //新建List把学生加进List        List<Student2> stuList = new ArrayList<>();        stuList.add(stu1);        stuList.add(stu2);        stuList.add(stu3);        stuList.add(stu4);        System.out.println("排序前:=====");        for(Student2 stu :stuList){            System.out.println("姓名:"+stu.getName() +" 年龄"+stu.getAge());        }        //排序        Collections.sort(stuList);  //只有一个参数参数为List        System.out.println("排序后:=====");        for(Student2 stu :stuList){            System.out.println("姓名:"+stu.getName() +" 年龄"+stu.getAge());        }    }}
  • 运行结果
    这里写图片描述

三、总结:两种方式写法和用法上的区别:

这里写图片描述

1 0
原创粉丝点击