Olá,
Tenho o seguinte código
[code] private static Map<Integer,Acomodacao> tipos = null;
static{
int i = 0;
Map<Integer,DTOAcomodacao> 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<Integer,DTOAcomodacao> aux = new BdAcomodacao().tiposExistentes();
for (Map.Entry<Integer,DTOAcomodacao> 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