java8 处理同分数排序例如 输入10010090输出:113使用stream流处理
可以使用Java 8的Stream流来处理同分数排序的问题。首先,我们可以将输入的分数存储在一个List中,然后使用Stream的distinct()方法去除重复的分数,再使用sorted()方法对分数进行排序,最后使用mapToInt()方法将分数转换为对应的排名。
下面是一个示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> scores = Arrays.asList(100, 100, 90);
List<Integer> ranks = scores.stream()
.distinct()
.sorted((a, b) -> Integer.compare(b, a))
.mapToInt(score -> scores.indexOf(score) + 1)
.boxed()
.collect(Collectors.toList());
System.out.println(ranks);
}
}
输出结果为:[1, 1, 3],即分数为100的排名为1,分数为90的排名为3。
在代码中,首先使用distinct()方法去除重复的分数,然后使用sorted()方法对分数进行排序,其中使用了一个自定义的比较器来实现降序排序。接着使用mapToInt()方法将分数转换为对应的排名,其中使用了indexOf()方法来获取分数在原始列表中的索引位置,并加1表示排名。最后使用boxed()方法将IntStream转换为Stream,再使用collect(Collectors.toList())方法将结果收集为一个List。
原文地址: https://www.cveoy.top/t/topic/jb7Q 著作权归作者所有。请勿转载和采集!