In Anlehnung an die vorherige [Java 8] Richtige Verwendung von Compareable und Comparator unter dem Gesichtspunkt der Mitarbeitersortierung sind dies Tipps zum Sortieren.
Ich konnte nicht viel finden, als ich danach suchte,
["2", "32", "100", "13", "1", "21"]
Eine solche Anordnung
["A02", "12", "A11", "A01", "B01", "A21"]
Ich möchte diese Art von Array sortieren ** "Yoshina" **! Hast du jemals gedacht?
Es ist mühsam, jede Zahl zu analysieren, und wenn sie analysiert wird, ist es mühsam zu kontrollieren, wenn es sich nicht um eine Zahl handelt. Es ist keine große Sache, aber ich dachte, es könnte mit einem relativ einfachen Prozess gelöst werden, also werde ich den Prozess aufschreiben.
Erwartetes Sortierergebnis
["1", "2", "13", "21", "32", "100"]
// ->Vor dem Sortieren["2", "32", "100", "13", "1", "21"]
["12", "A01", "A02", "A11", "A21", "B01"]
// ->Vor dem Sortieren["A02", "12", "A11", "A01", "B01", "A21"]
Die Quintessenz ist ** Vergleichen Sie zuerst die Länge der Zeichenfolgen und dann die Zeichenfolgen **.
Ich werde es tatsächlich schreiben.
Vergleichen Sie die Länge der Zeichenfolgen und dann die Zeichenfolgen
pubic List<String> sort(List<String> list) {
list.sort((s1, s2) -> {
if (compareLength(s1, s2) == 0) {
return s1.compareTo(s2);
}
return compareLength(s1, s2);
});
return list;
}
private int compareLength(String s1, String s2) {
if (s1.length() > s2.length()) {
return 1;
} else if (s1.length() < s2.length()) {
return -1;
} else {
return 0;
}
}
Ausführungsergebnis
List<String> list1 = new ArrayList<>(Arrays.asList("2", "32", "100", "13", "1", "21"));↲
List<String> list2 = new ArrayList<>(Arrays.asList("A02", "12", "A11", "A01", "B01", "A21"));↲
List<String> list3 = new ArrayList<>(Arrays.asList("0002", "0032", "0100", "0013", "0001", "0021"));↲
System.out.println(ArrayUtils.toString(sort(list1)));
System.out.println(ArrayUtils.toString(sort(list2)));
//Ausführungsergebnis
[1, 2, 13, 21, 32, 100]
[12, A01, A02, A11, A21, B01]
Übrigens, auch wenn die Ziffern mit 0 aufgefüllt sind und die Anzahl der Ziffern gleich ist, wird sie wie erwartet sortiert.
Bei 0 Füllung
List<String> list = new ArrayList<>(Arrays.asList("0002", "0032", "0100", "0013", "0001", "0021"));↲
System.out.println(ArrayUtils.toString(sort(list)));
//Ausführungsergebnis
[0001, 0002, 0013, 0021, 0032, 0100]
** "Yoshinani" ** Ich glaube nicht, dass es in jeder Situation verwendet werden kann, aber ich persönlich bin mit den erwarteten Ergebnissen zufrieden. Wenn Sie eine Logik haben, die intelligenter verarbeitet werden kann, oder eine Liste, die mit dieser Methode nicht "gut" verarbeitet werden kann, wäre ich Ihnen dankbar, wenn Sie sie teilen könnten!
Er kommentierte, dass es einfacher wäre, wenn Sie Folgendes tun würden!
List<String> list = Arrays.asList("2", "32", "100", "13", "1", "21");
list.sort(Comparator.comparing(String::length).thenComparing(Function.identity());
System.out.println(list);
Recommended Posts