Eu tenho um HashMap
:
private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
Agora eu gostaria de percorrer todos os valores e imprimi-los.
Eu escrevi isto:
for (TypeValue name : this.example.keySet()) {
System.out.println(name);
}
Não parece funcionar.
Qual é o problema?
EDIT: Outra pergunta: Esta coleção é baseada em zero? Quero dizer, se tem 1 chave e o valor será de 0 ou 1?
java
collections
Usuário desconhecido
fonte
fonte
Map
dosize()
método : "Retorna o número de mapeamentos de valores-chave neste mapa. Se o mapa contiver mais do queInteger.MAX_VALUE
elementos, retornaráInteger.MAX_VALUE
."Respostas:
keySet () retorna apenas um conjunto de chaves do seu mapa de hash, você deve iterar esse conjunto de chaves e obter o valor do mapa de hash usando essas chaves.
No seu exemplo, o tipo da chave do hashmap é
TypeKey
, mas você especificouTypeValue
em seu loop for genérico, portanto não pode ser compilado. Você deve alterá-lo para:Atualização para Java8:
Se você não precisar imprimir o valor da chave e precisar apenas do valor do hashmap, poderá usar as sugestões de outras pessoas.
A coleção retornada
keySet()
é um conjunto . Você não pode obter o valor de um conjunto usando um índice; portanto, não é uma questão de saber se é baseado em zero ou baseado em um. Se o seu hashmap tiver uma chave, o keySet () retornado terá uma entrada e seu tamanho será 1.fonte
for (Map.Entry<String, String> entry : map.entrySet()) { ... }
example.forEach((key, value) -> System.out.println("key + " | " + value));
Uma maneira simples de ver os pares de valores-chave:
O método 1 e o método 2 geram isso:
fonte
System.out.println(map);
output:{b=2, a=1}
System.out.println(map.toString());
.toString
quando possível.Supondo que você tenha um
Map<KeyType, ValueType>
, você pode imprimi-lo assim:fonte
Para imprimir chave e valor, use o seguinte:
fonte
Você tem várias opções
map.values()
, que obtém os valores, não as chavesmap.entrySet()
que tem amboskeySet()
e para cada chamada principalmap.get(key)
fonte
Você deseja definir o valor, não o conjunto de chaves:
O código que você fornece nem compila, o que pode ser mencionado em perguntas futuras - "parece não funcionar" é um pouco vago!
fonte
Vale mencionar a abordagem Java 8, usando
BiConsumer
e funções lambda:Supondo que você substituiu o
toString
método dos dois tipos, se necessário.fonte
Para mim, essa linha simples funcionou bem:
fonte
Uma declaração simples de impressão com o nome da variável que contém a referência do Mapa Hash faria:
Isso funciona porque o
toString()
método já está substituído noAbstractMap class
que é estendido peloHashMap Class
Mais informações da documentaçãofonte
Java 8 novo
forEach
estilo de recursofonte
Eu fiz isso usando o mapa de cordas (se você estiver trabalhando com o mapa de cordas).
fonte
Usando os recursos do Java 8
fonte
Útil para imprimir rapidamente entradas em um HashMap
fonte
Se o mapa reter uma coleção como valor, as outras respostas exigirão um esforço adicional para convertê-las como seqüências de caracteres, como
Arrays.deepToString(value.toArray())
(se for um mapa de valores de lista), etc.Eu enfrentei esses problemas com bastante frequência e me deparei com a função genérica para imprimir todos os objetos usando
ObjectMappers
. Isso é bastante útil em todos os lugares, especialmente durante experiências, e eu recomendo que você escolha esse caminho.fonte
Você pode usar a
Entry
classe para lerHashMap
facilmente.fonte