Estou estudando lista e me deparei com um problema:
Eu tenho um dicionário que é basicamente uma lista mas com uma CHAVE e um VALOR.
Quero fazer o seguinte:
Criar um dicionario que receba um estado (MG) como CHAVE e outro dicionário como VALOR.
Dicionario dic = new Dicionario();
dic.put("MG", new Dicionario());
Agora faço um get para pegar o dicionario que criei acima e acessar esse new dicionario que criei como valor. O get retorna objeto, então eu transformo em Dicionario.
((Dicionario) dicionario.get("MG")).put("CIDADE A", new Lista());
O get me retorna o valor do primeiro dicionario criado, nele eu setei uma chave (Cidade A) e um valor que é uma lista.
Eu vou adicionar vários estados, varias cidades nesses estados e vários bairros nessas cidades.
Não consigo achar uma forma para imprimir desse formato:
MG
–CIDADE A
----CENTRO
SP
–CIDADE B
----PALMEIRAS
A unica forma que consegui imprimir foi assim
System.out.println(“MG”); // Quero automatizar isso
((Dicionario) dicionario.get(“MG”)).print(); // Aqui printa todas cidades de MG
((Lista)(((Dicionario) dicionario.get(“MG”)).get(“CIDADE A”))).print(); // Aqui printa todos os bairros da cidade A de MG.
QUERO IMPRIMIR DESSA FORMA
for (int i = 0; i < 3; i++){
System.out.println(“ESTADOS”);
for (int x=0; x < 3; x++)
System.out.println(" CIDADES");
for(int z=0; z < 3; z++)
System.out.println(" BAIRROS");
}
import java.lang.Iterable;
import java.util.Iterator;
public class Lista implements Iterable<Object> {
public Object[] dados = new Object[]{ "item 1", "item 2", "item 3", "item 4" };
public Iterator<Object> iterator() {
return new Iterator<Object>() {
int i = 0;
public boolean hasNext() {
return i < dados.length;
}
public Object next() {
Object item = dados[i];
i += 1;
return item;
}
};
}
public static void main(String[] args) {
Lista lista = new Lista();
for (Object item : lista) {
System.out.println(item);
}
System.out.println("imprimir 3 itens");
Iterator itr = lista.iterator();
for (int i = 0; i < 3; i++) {
System.out.println(itr.next());
}
}
}
Para o dicionário, teria que criar uma classe Entry que contém a chave e o item, e retornar no método next.
Iterator<Entry> itr = dicionario.iterator();
for (int i = 0; i < 3; i++) {
Entry entry = itr.next();
System.out.println(entry.getKey());
System.out.println(entry.getItem());
}
Depois fica fácil imprimir daquele jeito:
for (Entry estadoEntry : dicionario) {
System.out.println("Estado: " + estadoEntry.getKey());
Dicionario cidades = (Dicionario) estadoEntry.getItem();
for (Entry cidadeEntry : cidades) {
System.out.println("Cidade: " + cidadeEntry.getKey());
Lista bairros = (Lista) cidadeEntry.getItem();
for (Object bairro: bairros) {
System.out.println("Bairro: " + bairro);
}
}
}