Capturar a chave(key) de um map, a partir do value

Olá

Existe algum método que captura a chave(key) de um objeto do tipo map quando eu passar o valor correspondente

exemplo:

[quote]
map(1, ‘eu’);
map(2, ‘você’);
map(3, ‘ele’);[/quote]

quando eu passar “você” ele me retorne a chave 2

valeu

Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry)it.next(); if(pairs.getValue().equalsIgnoreCase("você")) { System.out.println(pairs.getKey()); } }

Como na definição de um map você poderá ter um valor para chaves diferentes… então você poderá sim… mas será obter as chaves.

dreampeppers99 não entendi nada?

finotti Obrigado pela dica, vou analizar a viabilidade dela.

paulofernandesjr
Ele quis dizer que cada chave terá um e apenas um valor… Exemplo:

1, “Andre”
2, “Alberto”
3, “Gisele”
4, “Roberta”

Porém, um valor poderá ter vária chaves:

1, “Andre”
2, “Alberto”
3, “Gisele”
4, “Roberta”
5, “Andre”

Portanto, eu pessoalmente acho que um Map não seria melhor solução para seu problema, uma vez que você terá de manipulá-lo “como se você um vetor”, a grosso modo dizendo claro. E essa manipulação acabará sendo mais confusa!

Então para não permitir mais de um value eu fiz isso

public class MeuMap<K, V> extends HashMap<K, V> {

	private static final long serialVersionUID = -278219108890449654L;

	@Override
	public V put(K key, V value) {
		if( !this.containsValue(value) ) {
			super.put(key, value);
		}
		return value;
	}
	
}

o que acham?

paulofernandesjr
Ele quis dizer que cada chave terá um e apenas um valor… Exemplo:

1, “Andre”
2, “Alberto”
3, “Gisele”
4, “Roberta”

Porém, um valor poderá ter vária chaves:

1, “Andre”
2, “Alberto”
3, “Gisele”
4, “Roberta”
5, “Andre”

Portanto, eu pessoalmente acho que um Map não seria melhor solução para seu problema, uma vez que você terá de manipulá-lo “como se você um vetor”, a grosso modo dizendo claro. E essa manipulação acabará sendo mais confusa!
[/quote]

Isso se aplica no exemplo dado no post dele.
Porém se ele garantir que não haja duplicatas funcionará perfeitamente.
Se for usar essa implementação com objetos, é essencial sobrescrever equals/hashcode.

Voce podia aproveitar sua classe e mapear a key também.

public class MeuMap<K, V> extends HashMap<K, V> {
              private Map<V,K> keyMap = new HashMap<V,K>();
	private static final long serialVersionUID = -278219108890449654L;

	@Override
	public V put(K key, V value) {
		if( !this.containsValue(value) ) {
			super.put(key, value);
                                                keyMap.put(value,key);
		}
		return value;
	}
	public K getKey(V value){
                     return keyMap.get(value);                
                }
}

Dai pra ter a chave voce invoca o getKey.
Ou então voce pode fazer um for com o Set<Entry<K,V>> que método entrySet do Map retorna e comparar até achar o valor.