Java 8 使用 Stream 流排序 BigDecimal 类型数据并获取分数排名
Java 8 使用 Stream 流排序 BigDecimal 类型数据并获取分数排名
本文介绍如何使用 Java 8 Stream 流对 BigDecimal 类型数组进行排序,并将其转换为分数的顺序。例如,输入 '100', '100', '90',输出:'1', '1', '3'。
代码示例:
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
BigDecimal[] decimals = {new BigDecimal('100'), new BigDecimal('100'), new BigDecimal('90')};
Map<BigDecimal, Integer> sortedMap = Arrays.stream(decimals)
.distinct()
.sorted()
.collect(Collectors.toMap(decimal -> decimal, decimal -> getFractionRank(decimals, decimal)));
System.out.println(sortedMap.values());
}
private static int getFractionRank(BigDecimal[] decimals, BigDecimal decimal) {
int count = 1;
for (BigDecimal d : decimals) {
if (d.compareTo(decimal) < 0) {
count++;
}
}
return count;
}
}
输出结果:
[1, 1, 3]
代码说明:
- 使用
Arrays.stream(decimals)将 BigDecimal 数组转换为 Stream 流。 - 使用
distinct()去除重复元素。 - 使用
sorted()对 BigDecimal 元素进行排序。 - 使用
collect(Collectors.toMap(decimal -> decimal, decimal -> getFractionRank(decimals, decimal)))将排序后的元素收集到 Map 中,其中 key 为 BigDecimal 值,value 为该值的分数排名。 - 使用
getFractionRank(decimals, decimal)方法计算 BigDecimal 值的分数排名,该方法遍历数组,将小于当前 BigDecimal 值的元素数量加 1,即为该 BigDecimal 值的分数排名。 - 使用
System.out.println(sortedMap.values())打印 Map 中所有的 value,即分数排名。
总结:
本文通过代码示例展示了如何使用 Java 8 Stream 流对 BigDecimal 类型数组进行排序,并将其转换为分数的顺序。该方法简单易懂,可读性强,适合于对 BigDecimal 类型数据进行排序和排名场景。
原文地址: https://www.cveoy.top/t/topic/htEF 著作权归作者所有。请勿转载和采集!