TreeSet Benutzerdefinierte Komparator-Algo .. String-Vergleich
Aus der input-string zur Verfügung gestellt:
{ "200,400,7,1", "100,0,1,1", "200,200,3,1", "0,400,11,1",
"407,308,5,1","100,600,9,1" } ,
Ich bin hinzufügen derselben in ein TreeSet und wollen sortiert werden, mit dem 3. element um, so dass die erwartete Ausgabe:
(100,0,1,1) (200,200,3,1) (407,308,5,1) (200,400,7,1) (100,600,9,1) (0,400,11,1)
Aber meine eigentliche Ausgabe ist:
(100,0,1,1)(0,400,11,1)(200,200,3,1)(407,308,5,1)(200,400,7,1)(100,600,9,1)
Aber seit der string-Vergleich von 11 ist kleiner als 9, aber in Bezug integer , 11>9 . Meine erwartete Ausgabe ist immer unterschiedlich. Schlage vor, mir eine gewisse Vorstellung zu lösen, die gleichen.
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetComparator {
public static void main(String[] args) {
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String a, String b) {
String aStr = a;
String bStr = b;
String[] splitA = aStr.split(",");
String[] splitB = bStr.split(",");
return splitA[2].compareTo(splitB[2]);
}
};
String[] arr = { "200,400,7,1", "100,0,1,1", "200,200,3,1",
"0,400,11,1", "407,308,5,1", "100,600,9,1" };
TreeSet<String> ts = new TreeSet<String>(comparator);
for (String str : arr) {
ts.add(str);
}
for (String element : ts)
System.out.print(element + " ");
}
}
InformationsquelleAutor Abhishek Choudhary | 2011-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist Sortierung in eine lexikographische Ordnung (
"123"
kommt vor"20"
), was Sie tun müssen, ist, konvertieren Sie Sie zu zahlen, und dann vergleichen Sie:Nicht:
aber:
Jedoch eine etwas sauberere Möglichkeit wäre ein benutzerdefiniertes Objekt erstellen, halten Sie diese 4 verschiedenen Werte und erstellen Sie dann eine
Comparator
vergleicht die 3rd Wert eines solchen Objekts:Folgende:
drucken würde:
InformationsquelleAutor Bart Kiers