Java 程序按升序对版本控制字符串进行排序

use*_*058 -3 java versioning sorting

我有一个包含版本字符串的列表,例如:

List<String> versions_list = Arrays.asList("1.1.2", "1.0.0", "1.3.3", "1.0.12", "1.0.2");
Run Code Online (Sandbox Code Playgroud)

我想对它进行排序,所以结果会是这样的:

["1.0.0", "1.0.2", "1.0.12", "1.1.2", "1.3.3"]
Run Code Online (Sandbox Code Playgroud)

如何在 Java 中执行此操作。

Jon*_*oni 5

这是一个现代解决方案,用于Comparator.comparing基于预先存在的标准库Arrays.compare(int[])方法构建版本字符串比较器。

    List<String> versionList = Arrays.asList("1.1.2", "1.0.0", "1.3.3", "1.0.12", "1.0.2");

    Pattern pattern = Pattern.compile("\\.");
    Comparator<String> versionComparator = Comparator.comparing(
        str -> pattern.splitAsStream(str)
            .mapToInt(Integer::parseInt)
            .toArray(),
        Arrays::compare);
    versionList.sort(versionComparator);
    
    System.out.println(versionList);
Run Code Online (Sandbox Code Playgroud)