Comment vérifier si une clé dans une Carte commence avec une valeur de Chaîne donnée
Je suis à la recherche d'une méthode comme:
myMap.containsKeyStartingWith("abc"); //returns true if there's a key starting with "abc" e.g. "abcd"
ou
MapUtils.containsKeyStartingWith(myMap, "abc"); //same
Je me demandais si quelqu'un connaissait un moyen simple de faire cela
Grâce
Vous devez vous connecter pour publier un commentaire.
Cela peut être fait avec un standard
SortedMap
:Des ménagères de cartes (par exemple,
HashMap
) ne sont pas intrinsèquement soutien préfixe recherches, donc pour ceux que vous aurez à effectuer une itération sur toutes les touches.TreeMap treeMap = new TreeMap(); treeMap.putAll(hashMap);
TreeMap<K,V> treeMap = new TreeMap<K,V>(hashMap);
À partir de la carte, vous pouvez obtenir un Ensemble de Touches, et dans le cas où ils sont de Chaîne, vous pouvez effectuer une itération sur les éléments de l'Ensemble et vérifier
startsWith("abc")
De construire sur Adel Boutros réponse/commentaire à propos de l'efficacité de l'itération touches, vous pouvez encapsuler clé itération dans un
Map
sous-classe ou d'un décorateur.L'extension de
HashMap
vous donnera une classe de mettre de la méthode dans et de garder la carte-code spécifique de votre méthode, ainsi, l'abaissement de la complexité et de rendre le code plus naturel de lire.MyMapExtension m = new MyMapExtension(myMap);
Ou vous pouvez aller avec un décorateur solution pour envelopper la carte. Les deux se lire de la même façon à votre idée de départ.