Duvida de Lógica e ArrayList

5 respostas
I

Bom, estou travado na hora de montar um array específico aqui, preciso de uma força de vocês na lógica!
A idéia é montar um Array que contenha dentro de cada posição [i], uma String, e um outro Array, exemplo: ArrayList teste[i] = {“StringQualquer”,ArrayList teste2} ;

Eu estou tentando fazer o máximo orientado á objeto, só que como eu disse, é um array especifico pois eu vou ter que separar os dados para que o array final possa me formar uma Árvore de Diretórios, ou seja, alguns dados irão ser filhos de outros, e poderão ter seus filhos também. Que seria no caso do "ArrayList teste2 do exemplo acima, ter uma outra String e Array dentro dele.

A minha lógica está assim:

public List<MenuFlex> montaMenu(){
		
		ArrayList<Menu> entrada = new ArrayList<Menu>();
		ArrayList<Menu> pai = new ArrayList<Menu>();
		ArrayList<Menu> filho = new ArrayList<Menu>();
		ArrayList<MenuFlex> monta = new ArrayList<MenuFlex>();
		ArrayList<MenuFlex> saida = new ArrayList<MenuFlex>();
	        entrada = pegaTree();   //pegaTree() é um método que vai no Banco e me trás os dados que eu preciso pra saber quem é pai e quem é filho.
		
		for (Menu bean : entrada) {
			   pai.add(bean);
			}
		for (Menu bean : entrada) {
		       filho.add(bean);
			}

//Até aqui eu tenho dois Arrays, um Pai e um Filho, como os mesmos dados em suas posições.

		for(Menu p : pai){
			for(Menu f : filho) {
						if(f.getIdpai() == p.getIdmenu()){  // A classe Menu é responsavel por armazenar os ID's para fazer as Comparações
						MenuFlex m = new MenuFlex(null,null); //Essa classe MenuFlex é um VO/Bean/POJO que tem uma String e um Array, e os pega no construtor
						m.setName(f.getName());
						monta.add(m);
						saida.add(new MenuFlex(p.getName(),monta));
				}
			}
	}
	return saida;
}

Certo, se estranharem porque eu criei uma classe Menu e outra MenuFlex, é porque o flex só vai conseguir interpretar meu Array se ele contiver apenas UM String e UM Array …e como a classe Menu tem os ID’s, se eu usar ela, o flex bagunça tudo…

Essa minha lógica só contempla um nível, ou seja, se os filhos tiverem filhos também, eles não serão montados da forma certa…alguém ai tem ideias para me destravar aqui?? não to conseguindo sair disso!! x\\

Qualquer ajuda é bem vinda!

5 Respostas

I

Ah, eu esqueci de citar, eu mando esse array “saida” pro flex, pelo BlazeDS , quanto á essa comunicação, está td certo, na verdade eu até estou gerando a árvore, mas a lógica ta errada, pois ela não aceita vários subníveis…o array não está sendo montado direito! x\

I

no ideas?

I

querem que eu cole as classes Menu e MenuFlex ? lá estão os getters e setters…tem também o método que faz a consulta no BD…se ajudar vcs a me ajudar eu vou incrementando ou refinando a duvida e tal! xD

I

?

I

Fiz umas alterações bacanas aqui, agora a lógica verifica se já existe aquele pai, se já existir ela cai fora, e deixa o array saida intacto…

public List<MenuFlex> montaMenu(){
		
		ArrayList<Menu> entrada = new ArrayList<Menu>();
		ArrayList<Menu> pai = new ArrayList<Menu>();
		ArrayList<Menu> filho = new ArrayList<Menu>();
		ArrayList<MenuFlex> monta = new ArrayList<MenuFlex>();
		ArrayList<MenuFlex> saida = new ArrayList<MenuFlex>();
	    entrada = pegaTree();
		
		for (Menu bean : entrada) {
			   pai.add(bean);
			}
		for (Menu bean : entrada) {
		       filho.add(bean);
			}
		for(Menu p : pai){
			for(Menu f : filho) {
						if(f.getIdpai() == p.getIdmenu()){
						MenuFlex m = new MenuFlex(null,null);
						m.setName(f.getName());
						monta.add(m); //-----Linha Problemática----
						if(saida.isEmpty()){
							saida.add(new MenuFlex(p.getName(),monta));
						}
						for(MenuFlex i : saida){
							if(i.getName() == p.getName()){
								System.out.println("Ja existe um pai com esse nome");
							}else{
								saida.add(new MenuFlex(p.getName(),monta));
								break;
							}
						}
						
						}
			}
	}
	return saida;
}

O problema está sendo os filhos…como eu vou dar novos subníveis pra eles??..to falando sozinho aqui nesse fórum heim O.x

Criado 8 de junho de 2010
Ultima resposta 9 de jun. de 2010
Respostas 5
Participantes 1