以下是一个示例代码,假设我们有一个 Student 类,其中有 name、score 和 rank 三个字段。我们需要对一组 Student 对象按照 score 字段进行排序,并给 rank 字段添加排名(score 相同的排名也相同)。

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

public class Student {
    private String name;
    private int score;
    private int rank;

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

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    public int getRank() {
        return rank;
    }

    public void setRank(int rank) {
        this.rank = rank;
    }

    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student('Tom', 80));
        students.add(new Student('Jerry', 90));
        students.add(new Student('Alice', 70));
        students.add(new Student('Bob', 80));
        students.add(new Student('Cathy', 85));

        // 按 score 字段排序
        Collections.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o2.getScore() - o1.getScore();
            }
        });

        // 添加 rank 字段
        int rank = 1;
        students.get(0).setRank(1);
        for (int i = 1; i < students.size(); i++) {
            if (students.get(i).getScore() == students.get(i - 1).getScore()) {
                students.get(i).setRank(rank);
            } else {
                rank = i + 1;
                students.get(i).setRank(rank);
            }
        }

        // 输出结果
        for (Student student : students) {
            System.out.println(student.getName() + ' ' + student.getScore() + ' ' + student.getRank());
        }
    }
}

输出结果为:

Jerry 90 1
Cathy 85 2
Tom 80 3
Bob 80 3
Alice 70 5

可以看到,按照 score 字段排序后,Jerry 排名第一,Cathy 排名第二,Tom 和 Bob 并列第三,Alice 排名第五。

Java 对象集合按 score 字段排序并添加排名 (score 相同排名相同)

原文地址: http://www.cveoy.top/t/topic/oXes 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录