可以使用 Java 8 中的 Stream API 来实现。

假设有一个名为 Person 的类,其中有两个字段:age 和 name。我们要按照 age 的大小给 name 添加排名,如果 age 相同,则排名也相同。

首先,我们需要将对象集合按照 age 字段进行排序:

List<Person> persons = ...; // 对象集合
persons.sort(Comparator.comparingInt(Person::getAge));

接下来,我们可以使用 IntStream 来生成排名序列,然后将排名序列和对象集合中的元素一一对应起来,将排名结果存储到 name 字段中:

IntStream.rangeClosed(1, persons.size())
         .forEach(i -> persons.get(i-1).setName(persons.get(i-1).getName() + ' (rank: ' + i + ')'));

这里使用了 rangeClosed 方法生成一个从 1 到集合大小的整数流,然后使用 forEach 方法将每个整数 i 对应到集合中的元素上,给 name 字段添加排名信息。

完整代码示例:

import java.util.*;

class Person {
    private int age;
    private String name;

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

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> persons = new ArrayList<>();
        persons.add(new Person(20, 'Alice'));
        persons.add(new Person(30, 'Bob'));
        persons.add(new Person(25, 'Charlie'));
        persons.add(new Person(25, 'David'));

        persons.sort(Comparator.comparingInt(Person::getAge));

        IntStream.rangeClosed(1, persons.size())
                 .forEach(i -> persons.get(i-1).setName(persons.get(i-1).getName() + ' (rank: ' + i + ')'));

        persons.forEach(p -> System.out.println(p.getName()));
    }
}

输出结果:

Alice (rank: 1)
Charlie (rank: 2)
David (rank: 3)
Bob (rank: 4)
Java 对象集合按字段排序并添加排名 - 使用 Stream API

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

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