簡體   English   中英

java 中帶點的字符串排序

[英]String sorting with dots in java

由於數據的雙重性質,我無法鍵入強制轉換(多點,例如:1.2.1)

如何在 java 中排序?

List<String> arr= new ArrayList<>();
arr.add("1.1");
arr.add("10.1");
arr.add("1.2.1");
arr.add("2.0");
arr.add("11.2");
arr.add("2.2.1");

預期的結果是

1.1
2.0
2.2.1
10.1
11.2

比較器的示例:

Comparator<String> indexComparator = (index1, index2) -> {
    int[] parts1 = Stream.of(index1.split("\\.")).mapToInt(Integer::parseInt).toArray();
    int[] parts2 = Stream.of(index2.split("\\.")).mapToInt(Integer::parseInt).toArray();
    
    // from Java 9 on: return Arrays.compare(parts1, parts2);
    // in Java 8:
    int n = Math.min(parts1.length, parts2.length);
    for (int i = 0; i < n; i++) {
        if (parts1[i] < parts2[i]) return -1;
        if (parts1[i] > parts2[i]) return 1;
    }
    return Integer.compare(parts1.length, parts2.length);
};

使用此比較器排序:

Collections.sort(arr, indexComparator);

編輯:Holger 幸運地指出,添加了 Java 9 解決方案。

  1. 引入一個 class 代表您正在排序的數據(例如class SemVer ),使用 static from(String)方法解析字符串並返回SemVer
  2. 引入一個Comparator器來描述比較SemVer的兩個實例的邏輯。
  3. 使用比較器作為Collections.sort()的參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM