Nun, ich habe TreeMap getestet, aber IgnoreCase beim String-Vergleich nicht berücksichtigt. Ich muss lexikographisch bestellen und den Fall ignorieren. Gibt es einen anderen Weg?
Danke, das funktioniert (TreeMap (Comparator c)). Ich habe jedoch eine andere Frage:
%Vor%Wie kann ich den Komparator universalisieren, um mit verschiedenen Objekten zu arbeiten? Angenommen, alle haben die Methode getId ().
Danke, Martin
Sie möchten ein Comparator
im < a href="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html#TreeMap%28java.util.Comparator%29"> TreeMap
-Konstruktor . Schauen Sie sich insbesondere String.CASE_INSENSITIVE_ORDER
an.
Verwenden Sie Collator
oder ein benutzerdefiniertes Comparator
Arbeiten Sie besser in einem nicht-englischen Gebietsschema oder wenn Sie eine komplexere Bestellung benötigen.
Der beste Weg wäre, einen Collator zu verwenden. Ein Collator ist eine integrierte Klasse, die auch Comparable implementiert und daher für Ihre TreeMap verwendet werden kann.
Mit einem Collator können Sie auch die Stärke des Vergleichs steuern, wenn Sie beispielsweise auch akzentunempfindlich sein möchten.
%Vor%Wenn Sie eine Liste hätten, würde ich Collections.sort () mit einem Comparator versuchen. Möglicherweise müssen Sie Ihren eigenen Comparator rollen, der String.equalsIgnoreCase () anstelle von equals () verwendet.
%Vor%Aber ich war auf dem richtigen Weg. Versuchen Sie den TreeMap-Konstruktor, der einen Komparator verwendet:
%Vor%Ja, Sie möchten den TreeMap-Konstruktor verwenden, der einen Komparator benötigt. Erstellen Sie einen Komparator, der compareToIgnoreCase verwendet.
Wie kann ich den Komparator universalisieren? mit verschiedenen Objekten arbeiten? Angenommen, alle haben die Methode getId ().
Sie sollten einen BeanComparator verwenden können.
Ich vermute, dass Sie Ihre TreeMap
mit einem benutzerdefinierten Vergleicher erstellen sollten.
Tags und Links java sorting collections string-comparison treemap