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

Java中如何对符合x01-x96规则的数字列表进行自定义排序

实现思路

  • 先计算分组总数:每组固定96个元素,直接用总长度除以96即可得到分组数,不需要额外提前统计前缀范围
  • 外层循环遍历1~96的后缀序列,内层循环遍历所有分组,依次取出每个分组当前后缀对应的元素加入新列表,即可得到预期排序结果
  • 原代码问题:内层循环终止条件j == groups - 1仅会执行一次,同时偏移量计算未对应后缀遍历逻辑,循环步长设置错误,无法覆盖所有元素

正确Java实现代码

基于原列表顺序实现

// 计算分组总数
int groups = numbersList.size() / 96;
List<Long> numbersList2 = new ArrayList<>();
// 外层遍历后缀位:0对应后缀1,95对应后缀96
for (int suffixIndex = 0; suffixIndex < 96; suffixIndex++) {
    // 内层遍历所有分组
    for (int groupIndex = 0; groupIndex < groups; groupIndex++) {
        // 计算原列表中对应元素的下标:分组起始位置+后缀偏移量
        int originIndex = groupIndex * 96 + suffixIndex;
        numbersList2.add(numbersList.get(originIndex));
    }
}

基于数值自定义排序实现(不依赖原列表顺序)

如果原列表元素是乱序的,也可以直接通过自定义排序规则得到结果:

numbersList.sort((a, b) -> {
    // 取后两位作为第一排序维度
    int suffixA = a % 100;
    int suffixB = b % 100;
    if (suffixA != suffixB) {
        return Integer.compare(suffixA, suffixB);
    }
    // 前缀作为第二排序维度
    long prefixA = a / 100;
    long prefixB = b / 100;
    return Long.compare(prefixA, prefixB);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:15:03