2016-05-24 14 views
-6

Kann jemand mir bitte erklären, wie Java „Vergleichen“ Verfahren zur Eingabe arbeitet "XXXXS, XXXS, XXS, XS,S,M, L,XL,XXL,3XL"Wie „java.util.Comparator.compare (String o1, String o2)“ Methode funktioniert

Wenn die Eingabe "3XL,XS,S,M,L,XL,XXL" Ausgang ist "3XL,XS,S,M,L,XL,XXL" aber ich mag die Ausgabe als "XS,S,M,L,XL,XXL,3XL"

nach der Java-Dokumentation machen ("https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html") es sagt „Vergleicht seine zwei Argumente für Ordnung. Gibt eine negative ganze Zahl, Null oder eine positive ganze Zahl als erstes Argument kleiner als, gleich oder größer als die Sekunde. "

Wenn die Eingabe ist zwei Strings, wie es vergleicht als kleiner oder größer als? Ich denke, die Ausgabe basiert nicht auf alphabetischer Reihenfolge, weil "3XL, XS, S, M, L, XL, XXL" ist die Ausgabe I bekam.

+0

Lesen Sie die Dokumentation. Es wäre schneller gewesen, als diese Frage zu posten ... Wenn es etwas gibt, das Sie im Dokument nicht bekommen, dann sagen Sie es. – Tunaki

+2

'Comparator' ist eine * Schnittstelle *. Es implementiert nichts. Das ist für Sie zu tun. Hast du das getan? Wenn ja, zeig uns, was du hast. Wenn nicht, dann bitten Sie uns, es für Sie zu implementieren, aber diese Website ist kein Code-Schreibdienst, also ist das nicht Thema. – Andreas

Antwort

5

String s sind in lexikographischer Reihenfolge vergleichbar (d. H. In der Reihenfolge, in der sie in einem Wörterbuch erscheinen würden). Wenn Sie eine Comparator für Kleidergrößen implementieren möchten, müssten Sie die Logik selbst schreiben. Z.B .:

public class ClothesSizeComparator implements Comparator<String> { 
    private static final List<String> SIZES = 
     Arrays.asList("XS", "S", "M", "L", "XL", "XXL", "3XL"); 

    @Override 
    public int compare(String s1, String s2) { 
     int s1pos = SIZES.indexOf(s1); 
     int s2pos = SIZES.indexOf(s2); 
     return Integer.compare(s1pos, s2pos); 
    } 
} 

Hinweis: Diese Comparator geht davon aus, dass beide Strings gültig bekleiden Größen darstellen. Wenn diese Annahme nicht möglich ist, müssen Sie eine Fehlerbehandlung hinzufügen.

+0

Hallo Mureinik, Danke für die Information. Ich habe dieses Problem in der Implementierung von "hybris" gefunden. Sie haben die obige Logik entwickelt. Aber das Problem war ein Fehler in ihrer Logik. Sie betrachten "3XL, 4XL" als eine Zahl und ignorieren die normale Reihenfolge, die wir angegeben haben ("XS", "S", "M", "L", "XL", "XXL", "3XL"). Das war das Problem. Ich habe das Problem behoben, dann funktioniert es gut. Vielen Dank – Madhavi

Verwandte Themen