java将对象集合中按字段大小给另一字段添加排名字段值相同的排名也相同
可以使用Java 8中的Stream API来实现。
假设有一个名为Person的类,其中有两个字段:age和name。我们要按照age的大小给name添加排名,如果age相同,则排名也相同。
首先,我们需要将对象集合按照age字段进行排序:
List
接下来,我们可以使用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
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/huqV 著作权归作者所有。请勿转载和采集!