假設所有的entried遵循相同的格式,這應該做,不同的是FA8Z-7406024-AB
將在排序後的數組,第二元件由於基於中間值比較:
Comparator<String> comparator = (s1, s2) -> {
String[] tokens1 = s1.split("-");
String[] tokens2 = s2.split("-");
int number1 = Integer.parseInt(tokens1[1].replaceAll("[^0-9]", ""));
int number2 = Integer.parseInt(tokens2[1].replaceAll("[^0-9]", ""));
//Compare the numbers
if(number1 - number2 == 0 && tokens1[1].length() == tokens2[1].length()){
//Compare the Strings
return tokens1[0].compareTo(tokens2[0]) == 0 ? tokens1[2].compareTo(tokens2[2]) : tokens1[0].compareTo(tokens2[0]);
}else if (tokens1[1].length() != tokens2[1].length()){
return tokens1[1].length() - tokens2[1].length();
}else{
return number1 - number2;
}
};
下面是一個例子:
List<String> list = Arrays.asList("FA8Z-7406024-AB", "DS7Z-66329294-D", "AA8Z-66329294-S", "SR3Z-15342-H", "TR3Z-72B381942-S", "TR3Z-72381942-S");
Collections.sort(list, comparator);
System.out.println(list);
創建[比較](https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html)。 – Compass
併發布代碼後,如果您有問題,請指定它們。 – SomeDude
請閱讀[如何創建最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve) –