Java 对象集合按字段排序并添加排名 - 使用 Stream API
可以使用 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)
原文地址: http://www.cveoy.top/t/topic/oXe0 著作权归作者所有。请勿转载和采集!