[Java] Sortiertipps beim Mischen von Zeichenfolgen und Zahlen

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!

Nachtrag

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

[Java] Sortiertipps beim Mischen von Zeichenfolgen und Zahlen
[Java] Was sind Überschreibungen und Überladungen?
[Java] Tipps und Fehlerprobleme beim Konvertieren von Double zu Big Decimal
Konvertieren Sie Java org.w3c.dom.Document-Objekte und XML-Zeichenfolgen
Verhalten beim Tragen von Java-Anmerkungsnamen
Java Jshell und Var sind zu empfehlen!
[Java] Vorsichtsmaßnahmen beim Vergleichen von Zeichenfolgen mit Zeichenfolgen
Java-Tipps, Tipps
Java-Tipps
Java switch Anweisung und break, Kotlin beim Ausdruck ...
Java-Tipps - Nehmen Sie eine Abhängigkeit an, wenn in JavaMail eine ClassNotFoundException auftritt
Wenn Java-Tests Umgebungsvariablen enthalten
Unterscheiden Sie in Java zwischen positiven und negativen Zahlen