Maison >Java >javaDidacticiel >Comment trouver des clés associées à des valeurs spécifiques dans un HashMap ?

Comment trouver des clés associées à des valeurs spécifiques dans un HashMap ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-18 22:38:111004parcourir

How to Find Keys Associated with Specific Values in a HashMap?

Recherche de clés associées à des valeurs dans HashMap

Lorsque vous travaillez avec des hashmaps, il est souvent nécessaire de récupérer des clés en fonction de valeurs spécifiques. Il existe plusieurs approches pour accomplir cette tâche en Java.

Une option consiste à parcourir le EntrySet() du HashMap et à comparer la valeur de chaque entrée à celle souhaitée :

public static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) {
    Set<T> keys = new HashSet<>();
    for (Entry<T, E> entry : map.entrySet()) {
        if (Objects.equals(value, entry.getValue())) {
            keys.add(entry.getKey());
        }
    }
    return keys;
}

Si vous attendez une relation un-à-un entre les clés et les valeurs, vous pouvez récupérer la première clé correspondante :

public static <T, E> T getKeyByValue(Map<T, E> map, E value) {
    for (Entry<T, E> entry : map.entrySet()) {
        if (Objects.equals(value, entry.getValue())) {
            return entry.getKey();
        }
    }
    return null;
}

Dans Java 8, vous pouvez exploiter les flux pour un code plus concis :

public static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) {
    return map.entrySet()
              .stream()
              .filter(entry -> Objects.equals(entry.getValue(), value))
              .map(Map.Entry::getKey)
              .collect(Collectors.toSet());
}

Alternativement, pour les situations avec des mappages bidirectionnels, la bibliothèque Guava fournit BiMap qui propose des recherches directes de valeurs-clés et vice-versa. Par exemple :

BiMap<Token, Character> tokenToChar = 
    ImmutableBiMap.of(Token.LEFT_BRACKET, '[', Token.LEFT_PARENTHESIS, '(');
Token token = tokenToChar.inverse().get('(');
Character c = tokenToChar.get(token);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn