You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java对象排序时相同值元素如何分配共享的序数后缀?

解决方案

不需要修改ordinal()方法,你只需要调整打印逻辑,识别连续分数相同的分组,为同一分组生成统一的区间排名前缀即可,具体实现思路和代码如下:

  1. 遍历已排序的客户列表时,先定位当前连续相同分数的区间起止位置
  2. 根据区间的起止位置计算对应的排名,区间长度为1时直接输出单个排名,长度大于1时输出区间排名
  3. 批量打印当前区间的所有客户信息后,跳到下一个不同分数的区间继续处理

示例代码

替换你原有的打印逻辑为以下代码即可实现预期效果:

int currentIndex = 0;
int clientSize = sortedClients.size();
// 逐个处理每个分数分组
while (currentIndex < clientSize) {
    // 记录当前分组的起始排名、起始分数
    int startRank = currentIndex + 1;
    double currentScore = sortedClients.get(currentIndex).getScore();
    // 向后查找当前分组的结束索引
    int endIndex = currentIndex;
    while (endIndex + 1 < clientSize 
            // 浮点型分数建议用差值小于阈值判断相等,避免精度问题,精度要求不高也可以直接用==
            && Math.abs(sortedClients.get(endIndex + 1).getScore() - currentScore) < 1e-6) {
        endIndex++;
    }
    int endRank = endIndex + 1;
    // 生成排名前缀
    String rankPrefix = startRank == endRank ? 
            ordinal(startRank) : 
            ordinal(startRank) + "-" + ordinal(endRank);
    // 打印当前分组所有客户
    for (int i = currentIndex; i <= endIndex; i++) {
        System.out.println(rankPrefix + " " + sortedClients.get(i).getName() + " - " + sortedClients.get(i).getScore());
    }
    // 跳转至下一分组
    currentIndex = endIndex + 1;
}

内容的提问来源于stack exchange,提问作者dennis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:15:03