SORU
5 EYLÜL 2009, CUMARTESİ


Java Hashmap: Nasıl anahtar değerini almak için?

Eğer değeri varsa "foo" ve ftw.containsValue("foo") HashMap<String> ftw true, ne kadar ilgili tuşa alabilir miyim? döndürür Üzerinden hashmap döngü var mı? Bunu yapmanın en iyi yolu nedir?

CEVAP
25 Mayıs 2010, Salı


Eğer veri yapısı varsaçok-biranahtarları ve girdileri üzerinde yineleme ve tüm uygun anahtar teslim etmelisiniz değerleri arasında eşleme:

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

Durumundabire-birilişki, ilk eşleşen anahtar dönebilirsiniz:

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;
}

Java 8:

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());
}

Ayrıca, Guava kullanıcıları için, *12 faydalı olabilir. Örneğin:

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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • cekehechu

    cekehechu

    20 HAZİRAN 2006
  • sghaff1

    sghaff1

    23 Mart 2009
  • TheSalband Rai

    TheSalband R

    11 NİSAN 2011