Capturar a chave de um Map pelo valor

5 respostas
rafaelolian

Olá pessoal, estou com o seguinte problema:

private static Map<String , Action> mapActions = new HashMap<String , Action>(); 
	
	static{
		mapActions.put( "usuario" , Action.create(UsuarioAction.class) );
		mapActions.put( "paginaUsuario" , Action.create("/testeUsuario.jsp") );
	}

Eu tenho esse meu Map onde a chave é String e o valor é Action (classe minha, não do struts)
queria resgatar a chave passando o objeto de valor, no caso uma action

Obrigado pela atenção!

5 Respostas

Mauricio_Linhares

E por que você precisa disso?

Você não deveria fazer esse tipo de coisa usando um Map. De qualquer forma:

Object valor = //ponha aqui o objeto a ser encontrado
Map<String,Object> map = new HashMap<String,Object>();

for ( Entry<String,Object>  entry : map.entrySet() ) {
    if ( entry.getValue().equals( valor ) ){
        //esse é o seu valor, aqui você faz o que quiser
    }
}
rafaelolian

Muito obrigado pela resposta

Você falou que não seria o mais correto fazer isso com Map, qual seria o ideal?
No meu caso preciso de uma coleção de chave composta, onde nem a chave nem o valor podem se repetir

Queria uma solução onde eu não corra por toda minha coleção

tipo um

Key : get( Value )

peczenyj

E se vc tiver mais de uma key apontando para o mesmo valor?

LPJava

rafaelolian:
Muito obrigado pela resposta

Você falou que não seria o mais correto fazer isso com Map, qual seria o ideal?
No meu caso preciso de uma coleção de chave composta, onde nem a chave nem o valor podem se repetir

Queria uma solução onde eu não corra por toda minha coleção

tipo um

Key : get( Value )

se vc repetir a chave o valor é subscrito!

J

Se nem a chave nem o valor podem se repetir então vc precisa de um Map bidirecional, onde vc pode recuperar o valor a partir da chave, e vice-versa. Infelizmente a distribuição padrão do Java não dispõe de tal estrutura de dados, mas tem dois projetos que dispõe (um do Apache e outro do Google), com seus respectivos nomes:

  1. Apache Commons Collections - BidiMap
  2. Google Collections Library - BiMap
Criado 4 de janeiro de 2008
Ultima resposta 4 de jan. de 2008
Respostas 5
Participantes 5