MapString sortieren, Objekt mit Schlüsseln mit IgnoreCase?

7

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

    
d0pe 07.11.2009, 01:25
quelle

7 Antworten

34

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.

> %Vor%

Verwenden Sie Collator oder ein benutzerdefiniertes Comparator Arbeiten Sie besser in einem nicht-englischen Gebietsschema oder wenn Sie eine komplexere Bestellung benötigen.

    
Michael Brewer-Davis 07.11.2009, 01:35
quelle
6

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%     
Chi 07.11.2009 01:34
quelle
1

Geben Sie einen Vergleicher an, der Zeichenfolgen, die ignoriert werden, vergleicht.

TreeMap (Vergleicher c)

    
Murali VP 07.11.2009 01:34
quelle
0

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%     
shoover 07.11.2009 01:34
quelle
0

Ja, Sie möchten den TreeMap-Konstruktor verwenden, der einen Komparator benötigt. Erstellen Sie einen Komparator, der compareToIgnoreCase verwendet.

    
dustmachine 07.11.2009 01:34
quelle
0
  

Wie kann ich den Komparator universalisieren?   mit verschiedenen Objekten arbeiten?   Angenommen, alle haben die Methode getId ().

Sie sollten einen BeanComparator verwenden können.

    
camickr 07.11.2009 02:39
quelle
0

Ich vermute, dass Sie Ihre TreeMap mit einem benutzerdefinierten Vergleicher erstellen sollten.

%Vor%     
Jeff Paquette 07.11.2009 01:35
quelle