61 votes

Est-il un bon moyen d'avoir une Carte<String, ?=""> obtenir et mettre en ignorant les cas?

Est-il un bon moyen d'avoir un Map<String, ?> get et put ignorant la casse?

63voto

volley Points 3229

TreeMap s'étend de la Carte et prend en charge personnalisée des comparateurs.

String fournit une valeur par défaut de la casse de comparaison.

Donc:

final Map<String, ...> map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

La comparaison ne prend pas de paramètres régionaux en compte. Lire plus à ce sujet dans sa JavaDoc.

42voto

Eric Weilnau Points 1968

Vous pouvez utiliser CaseInsensitiveMap de Apache Commons Collections.

31voto

Guido García Points 13252

Serait-il possible de mettre en œuvre votre propre Carte primordial de mettre/obtenir méthodes ?

public class CaseInsensitiveMap extends HashMap<String, String> {
    ...
    put(String key, String value) {
       super.put(key.toLowerCase(), value);
    }

    get(String key) {
       super.get(key.toLowercase());
    }
}

Cette approche ne permet pas de vous forcer à changer votre clé de type" mais votre Carte de mise en œuvre.

14voto

John M Points 6468

Vous avez besoin d'une classe wrapper pour votre clé de Chaîne avec un casse equals() et hashCode() de la mise en œuvre. Au lieu d'utiliser la Chaîne de caractères pour la Carte clé.

Voir un exemple de mise en œuvre à http://www.java.happycodings.com/Java_Util_Package/code3.html je l'ai trouvé en 2 minutes de recherche sur google. Semble raisonnable pour moi, bien que je n'ai jamais utilisé.

3voto

Les trois solutions évidentes qui viennent à l'esprit:

  • Normaliser les cas, avant d'utiliser une Chaîne de caractères comme une clé (pas turque locale fonctionne différemment du reste du monde).

  • À l'aide d'un type d'objet conçu pour être utilisé en tant que clé. C'est un idiome commun pour traiter les clés composites.

  • Utiliser un TreeMap avec un Comparateur qui est insensible à la casse (peut-être une PRIMAIRE ou SECONDAIRE de la force de java.texte.Collateur). Malheureusement, la bibliothèque Java ne dispose pas d'un Comparateur d'équivalent pour hashCode/égale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X