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

如何将字符串版本号列表按版本分支分组为List<List<String>>结构

实现思路

核心是按版本号的前两段(主版本+次版本)作为分组标识,把相同标识的版本归入同一个子列表:

  1. 用哈希表暂存分组结果,key为「主版本.次版本」的分支标识,value为对应分支的版本列表
  2. 遍历原始版本列表,拆分每个版本号生成分组key,将版本号存入对应key的列表
  3. 最后把哈希表的所有值存入你初始化的releases集合即可
    如果需要版本列表按高低版本排序,可以额外加排序逻辑。

Java 实现代码

import java.util.*;

public class VersionGroupDemo {
    public static void main(String[] args) {
        // 原始版本列表
        List<String> versionList = Arrays.asList("7.5.9", "7.5.8", "7.5.7", "7.5.6", "7.5.5", "7.5.4", "7.5.3", "7.5.2", "7.5.1", "7.5.0", "6.5.1", "6.5.0");
        List<List<String>> releases = new ArrayList<>();
        Map<String, List<String>> groupMap = new HashMap<>();

        for (String version : versionList) {
            String[] parts = version.split("\\.");
            // 兼容非标准版本号,避免数组越界
            if (parts.length < 2) {
                continue;
            }
            String branchKey = parts[0] + "." + parts[1];
            // 不存在分支则新建列表,存在则直接追加
            groupMap.computeIfAbsent(branchKey, k -> new ArrayList<>()).add(version);
        }

        releases.addAll(groupMap.values());

        // 可选:每个子列表按版本从高到低排序
        for (List<String> branchVersions : releases) {
            branchVersions.sort((v1, v2) -> {
                String[] v1Seg = v1.split("\\.");
                String[] v2Seg = v2.split("\\.");
                // 按第三段版本号倒序,需要全版本比较可以扩展逻辑
                return Integer.compare(Integer.parseInt(v2Seg[2]), Integer.parseInt(v1Seg[2]));
            });
        }

        // 输出验证
        System.out.println(releases);
    }
}

Groovy 实现代码

你示例中用到了def定义列表,Groovy语法可以更简化实现:

def versionList = ["7.5.9", "7.5.8", "7.5.7", "7.5.6", "7.5.5", "7.5.4", "7.5.3", "7.5.2", "7.5.1", "7.5.0", "6.5.1", "6.5.0"]
List<List<String>> releases = versionList.groupBy {
    def parts = it.split(/\./)
    "${parts[0]}.${parts[1]}"
}.values().toList()

// 可选:按版本倒序排序
releases.each { it.sort { v -> -v.split(/\./)[2].toInteger() } }

注意事项

  • 如果你的版本分支规则不是「主版本.次版本」,比如需要按三位x.y.z分组,修改拼接branchKey的逻辑取前三位即可
  • 代码中已经加了基础的版本号格式校验,不符合规则的版本会自动跳过,可以根据业务需求调整校验逻辑
  • 排序逻辑可以根据你的需要调整,比如要从小到大排序把比较逻辑反过来就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:57:00