首页 > 编程语言 > 详细

Java 对象排序

时间:2020-11-01 09:54:09      阅读:32      评论:0      收藏:0      [点我收藏+]

学习备忘,自己写一遍,方便以后查找。

 

一、基础说明

Java 自定义对象的排序,有两种方法可以实现;

第一种方法是类实现Comparable<T>接口,然后调用Collections.sort(List)方法进行排序;

第二种方法是类不实现Comparable<T>接口,而在排序时使用Collections.sort(List, Comparator<T>)方法,并实现其中的Comparator<T>接口。

 

二、第一种方式,类实现Comparable<T>接口

package com.casic.usvapi.test;

import lombok.Data;

/**
 * @author Spqin
 * @Date 2020/10/31 23:47
 */
@Data
public class Student implements Comparable<Student>{

    private String name;
    private Integer age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 排序 this在前是升序,this在后是降序
     * @param o
     * @return
     */
    @Override
    public int compareTo(Student o) {
        //return this.age.compareTo(o.getAge()); //升序排列
        return o.getAge().compareTo(this.age);  //降序排列
    }

    @Override
    public String toString() {
        return "Student{" +
                "name=‘" + name + ‘\‘‘ +
                ", age=" + age +
                ‘}‘;
    }
}

第一种方法的问题:属性必须是封装类,不能是int,float 这种类型。

 

三、第种方式,类不实现Comparable<T>接口,在Collections.sort()方法中实现Comparable<T>接口

package com.casic.usvapi.test;

import lombok.Data;

/**
 * @author Spqin
 * @Date 2020/10/31 23:47
 */
@Data
public class Student {

    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name=‘" + name + ‘\‘‘ +
                ", age=" + age +
                ‘}‘;
    }
}

 

package com.casic.usvapi.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author Spqin
 * @Date 2020/10/31 23:49
 */
public class StudentSortTest {

    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("A", 17));
        students.add(new Student("C", 20));
        students.add(new Student("B", 16));
        students.add(new Student("D", 17));

        Collections.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //return o1.getAge() - o2.getAge();  // o1 - o2 是升序,相等保持原来顺序
                return o1.getAge() - o2.getAge();    //o2 - o1 是降序,相等保持原来顺序
            }
        });
        for(Student student:students){
            System.out.println(student.toString());
        }
    }
}

 

第二种方法可以实现基础类型的排序。

 

Java 对象排序

原文:https://www.cnblogs.com/spqin/p/13908381.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!