Gambi - Alguem sabe se tem uma forma de fazer isso melhor - helppp

8 respostas
N

Pessoal,

To organizando uma "arvore" e fiz a segunti gambi:

private void sortPlanActionElementsRecur(int uid, List<SupportValeurFixe> list, List<SupportValeurFixe> sorted)
	{
		Iterator<SupportValeurFixe> iter = list.iterator();
		Iterator<SupportValeurFixe> iter1;
		Iterator<SupportValeurFixe> iter2;
		Iterator<SupportValeurFixe> iter3;
		Iterator<SupportValeurFixe> iter4;
		Iterator<SupportValeurFixe> iter5;
		SupportValeurFixe elem;
		SupportValeurFixe elem1;
		SupportValeurFixe elem2;
		SupportValeurFixe elem3;
		SupportValeurFixe elem4;
		SupportValeurFixe elem5;
		
		while(iter.hasNext()){			
			elem = iter.next();				
			if (elem.getIdParent() == 0){				
				sorted.add(elem);				
				iter1 = list.iterator();
				
				while(iter1.hasNext()){	
					elem1 = iter1.next();	
					if (elem1.getIdParent() == elem.getId()){
						sorted.add(elem1);						
						iter2 = list.iterator();
						
						while(iter2.hasNext()){	
							elem2 = iter2.next();	
							if (elem2.getIdParent() == elem1.getId()){
								sorted.add(elem2);								
								iter3 = list.iterator();
								
								while(iter3.hasNext()){	
									elem3 = iter3.next();	
									if (elem3.getIdParent() == elem2.getId()){
										sorted.add(elem3);										
										iter4 = list.iterator();
										
										while(iter4.hasNext()){	
											elem4 = iter4.next();	
											if (elem4.getIdParent() == elem3.getId()){
												sorted.add(elem4);												
												iter5 = list.iterator();
												
												while(iter5.hasNext()){	
													elem5 = iter5.next();	
													if (elem5.getIdParent() == elem3.getId()){
														sorted.add(elem5);														
													}
												}												
											}
										}										
									}
								}
							}						
						}
					}
				}
			}
		}			
	}

como da para se notar, ta um pouco complexo os whiles aninjados.

O problema é o seguinte:

Tenho o 1 registro, tenho que varrer toda a lista e encontrar o filho, varrer tufo e encontrar o neto.
Depois que encontrar todos os netos, varrer tudo e encontrar o segundo filho, todos os netos do segundo filho etc ...

Se alguem tiver alguma ideia de como posso resolver esta gambi, me ajude ...

tkz

8 Respostas

E

Você precisa escrever uma rotina recursiva. Você está varrendo uma árvore, não? Então você precisa varrê-la recursivamente.

N

Sim, estou vendo, mais como eu faço isso ??

E
N

Não sei como criar uma rotina assim, pois só tenho o ID e o ID_PARENT para controlar a arvore.

Então, não sei como não perder a linha que o while ta e criar um outro while, encontrando, criar um outro e nao tenho ideia de onde parar .

E

Você pode postar a classe do elemento da árvore? Só para ter uma ideia melhor.

N

Vou postar um exemplo da tabela, acho que fica melhor:
±------±--------±----------------------------------------------±---------±----------+
| ID | DOMAINE | DESCRIPTION | IND_PROD | ID_PARENT |
±------±--------±----------------------------------------------±---------±----------+
| 30000 | TREE | Principal 1 | 1 | [NULL] |
| 30001 | TREE | Menu 1 .1 | 1 | 30000 |
| 30012 | TREE | Menu 1 .2 | 1 | 30000 |
| 30003 | TREE | Menu 2 . 1 | 1 | 30100 |
| 30004 | TREE | Menu 2 .2 | 1 | 30100 |
| 30100 | TREE | Principal 2 | 1 | [NULL] |
| 30006 | TREE | Menu 1. 3 | 1 | 30000 |
| 30007 | TREE | Submenu 1.1.1 | 1 | 30001 |
| 30008 | TREE | Submenu 2.1.1 | 1 | 30003 |
| 30009 | TREE | Menu 1 .4 | 1 | 30000 |
±------±--------±----------------------------------------------±---------±----------+

Da forma que eu fiz, funciona, mais ta meio feio o codigo.

N

Ninguem tem ideia de como posso ordenar isso ??
Ou é assim mesmo ??

O problema é que nao posso perder a posicao de nenhum while, por isso criei tantas variáveis, e quando tentei reutilizar os interators estava perdendo a posicao anterior…

N

Isso pode se fazer assim:

private void sortPlanActionElementsRecur(int uid, List<SupportValeurFixe> list, List<SupportValeurFixe> sorted)
	{
		Iterator<SupportValeurFixe> iter = list.iterator();

		SupportValeurFixe elem;
		
		while(iter.hasNext()){			
			elem = iter.next();				
			if (elem.getIdParent() == uid){				
				sorted.add(elem);				
				sortPlanActionElementsRecur(elem.getId(), list, sorted);
			}
		}
	}
Criado 30 de outubro de 2009
Ultima resposta 10 de nov. de 2009
Respostas 8
Participantes 2