[英]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 解決方案。
class SemVer
),使用 static from(String)
方法解析字符串並返回SemVer
。Comparator
器來描述比較SemVer
的兩個實例的邏輯。Collections.sort()
的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.