java 对数据进行rank排序分数一样,名次一样
import lombok.Data;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
test1();
}
private static void test1() {
List<Person> list = getList().stream().sorted(Comparator.comparing(Person::getAge).reversed()).collect(Collectors.toList());
int a = 0, b = Integer.MIN_VALUE, c = 0;
for (Person person : list) {
if (person.getAge().equals(b)) {
c++;
} else {
b = person.getAge();
a = a + c + 1;
c = 0;
}
person.setRank(a);
}
list.stream().sorted((x, y) -> x.getRank() - y.getRank()).forEach(System.out::println);
}
private static List<Person> getList() {
ArrayList<Person> list = new ArrayList<>();
list.add(new Person("张三", 20));
list.add(new Person("李四", 50));
list.add(new Person("王五", 25));
list.add(new Person("赵六", 25));
list.add(new Person("marry", 35));
list.add(new Person("jack", 35));
list.add(new Person("ashe", 35));
return list;
}
@Data
static class Person {
private String name;
private Integer age;
private Integer rank;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" + "name='" + name + '\'' + ", age=" + age + ", rank=" + rank + '}';
}
}