Como percorrer um Mapa usando Generics?

Olá,

Tenho o seguinte código

[code] private static Map<Integer,Acomodacao> tipos = null;

static{
	int i = 0;
	Map&lt;Integer,DTOAcomodacao&gt; aux = new BdAcomodacao().tiposExistentes();
	for (Integer codigo:aux.keySet()){
		DTOAcomodacao dto = aux.get(codigo);
		Acomodacao umaAcomodacao = new Acomodacao();
		umaAcomodacao.setCodigo(dto.getCodigo());
		umaAcomodacao.setDescricao(dto.getDescricao());
		tipos.put(dto.getCodigo(),umaAcomodacao);
	}
}[/code]

Ao rodar o findBugs, tive a seguinte observação :

[quote]Inefficient use of keySet iterator instead of entrySet iterator
This method accesses the value of a Map entry, using a key that was retrieved from a keySet iterator. It is more efficient to use an iterator on the entrySet of the map, to avoid the Map.get(key) lookup.[/quote]

Como faço para usar este tal de entrySet ???

Obrigado,

Márcio

o metodo .entrySet vai te retornar um Set de Map.Entry<Key, Value>. faca o enhanced for em cima dele e ai voce da um getKey e getValue.

essa eh uma otimizacao totalmente desnecessaria se esse mapa nao tiver uma quantidade enorme de entradas, mas legal o findbugs pegar isso.

Seria isto?

[code] private static Map<Integer,Acomodacao> tipos = null;

static{
	int i = 0;
	Map&lt;Integer,DTOAcomodacao&gt; aux = new BdAcomodacao().tiposExistentes();
            for (Map.Entry&lt;Integer,DTOAcomodacao&gt; entry : aux.entrySet()) {
	        Integer codigo = entry.getKey();
                    DTOAcomodacao dto = entry.getValue();
		Acomodacao umaAcomodacao = new Acomodacao();
		umaAcomodacao.setCodigo(dto.getCodigo());
		umaAcomodacao.setDescricao(dto.getDescricao());
		tipos.put(dto.getCodigo(),umaAcomodacao);
	}
}[/code]

Off-topic - Até votei num RFE para que não tenhamos de ficar digitando a toda hora “Map<Integer,Acomodacao>”. Não seria para criar uma classe (como é feito hoje), mas para ter alguma construção que criasse um sinônimo (alias) para “Map<Integer,Acomodacao>”.

oi thingol
eh isso mesmo, mas voce usando o put ta perdendo a vantagem de usar Map.Entry, voce deve usar o setValue do Entry atual para nao ter de acessar a estrutura interna do mapa e fazer isso direto.

legal o RFE, eh tipo um import AS, que ja pediram faz tempo… mas eu tb nao acho tao vital.

Nem tinha visto que tinha um “put” no meio do loop. É claro que é melhor usar setValue…

Será que é pedir demais para alguém refatorar meu código ? Estou tendo dificuldades com o setValue no lugar do put.

Muito Obrigado,

Márcio