Ich habe eine Hashmap, die Platzhalter (*) in der Zeichenfolge enthalten kann.
Zum Beispiel
%Vor%kann John * als einen Schlüssel haben. Ich möchte wissen, ob JohnSmith irgendwelche Elemente in students_ übereinstimmt. Es könnte mehrere Übereinstimmungen für meine Zeichenfolge geben (John *, Jo * Smith usw.). Gibt es eine Möglichkeit, eine Liste dieser Spiele von meiner HashMap zu bekommen?
Gibt es ein anderes Objekt, das ich verwenden könnte, dass ich nicht jedes Element in meiner Sammlung durchlaufen muss, oder muss ich es saugen und ein List-Objekt verwenden?
Zu Ihrer Information: Meine Sammlung wird weniger als 200 Elemente enthalten, und letztendlich möchte ich das Paar finden, das mit der geringsten Anzahl von Platzhaltern übereinstimmt.
Das ist wegen der Hash-Funktion nicht mit einer Hasmap möglich. Es müsste den Hash von "John*"
und den Hash von "John Smith"
et al. der gleiche Wert.
Sie könnten es mit einer TreeMap machen, wenn Sie Ihre eigene benutzerdefinierte Klasse WildcardString
winding String schreiben und compareTo
so implementieren, dass "John*".compareTo("John Smith")
0 zurückgibt. Sie können dies mit regulären Ausdrücken wie andere Antworten haben bereits darauf hingewiesen.
Wenn Sie möchten, dass Sie die Liste der Widlcard-Zuordnungen möchten, können Sie die Einträge immer entfernen, wenn Sie sie finden, und iterate TreeMap.get()
s. Denken Sie daran, die Schlüssel zurück zu legen, wenn Sie mit einem Namen fertig sind.
Dies ist nur ein möglicher Weg, um es zu erreichen. Mit weniger als 200 Elementen können Sie gut iterieren.
UPDATE: Um eine korrekte Reihenfolge für TreeSet
festzulegen, können Sie den Fall des Vergleichs von zwei WildcardString
s (dh eine Vergleiche zwischen Schlüsseln) und den Vergleich von WildcardString
mit a unterscheiden String
(Vergleich eines Schlüssels mit einem Suchwert).
Sie können Ihre Map einfach iterieren, ohne sie in eine Liste zu konvertieren, und die String-Match-Funktion verwenden, die einen regulären Ausdruck verwendet.
Wenn Sie die Schleife vermeiden möchten, können Sie Guava wie folgt verwenden
%Vor%}