Recursivaidade

Galera bom dia, este ´o meu primeiro post, e gostaria da ajuda dos amigo pra resolver o meu problema.

tenho o seguinte codigo

public List<FuncionalidadeBean> listaBreadCrumb() throws Exception{
		
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<FuncionalidadeBean> listaFuncao = null;
		FuncionalidadeBean funcao = null;
		
			try{
				
				conn = dbConn.getConexao();
				ps = conn.prepareStatement(SQL_LISTA_BREAD_CRUMB);
				//ps.setString(1, acao);
				rs = ps.executeQuery();
				
				listaFuncao = new ArrayList<FuncionalidadeBean>();
					while(rs.next()){
						funcao = new FuncionalidadeBean();

						funcao.setNu_id_funcionalidade(rs.getInt("nu_id_funcionalidade"));
						funcao.setNome(rs.getString("st_nome"));
						funcao.setUrlPrincipal(rs.getString("url_principal"));
						funcao.setFuncionalidade_pai(retornaFuncionalidade(rs.getString("nu_funcionalidade_pai")));
						listaFuncao.add(funcao);
	
					}
					
							
			}catch(SQLException e){
				
				throw new Exception(e);
			}finally{
				releaseDAOObjects(conn, ps, rs);
			}

		return listaFuncao;
	}

	
	
	public FuncionalidadeBean retornaFuncionalidade(String idFuncionalidade) throws Exception{
		
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		FuncionalidadeBean funcionalidade = null;

		try{

			conn = dbConn.getConexao();
			ps = conn.prepareStatement(SQL_GET_FUNCIONALIDADE);
			ps.setString(1, idFuncionalidade);
			rs = ps.executeQuery();

			if(rs.next()){
				funcionalidade = new FuncionalidadeBean();
				funcionalidade.setNome(rs.getString("st_nome"));
				
				if(rs.getString("nu_funcionalidade_pai") != null){
					
					/**
					 * Metodo recursivo que preenche o pai e o pai do pai(enquanto não chegar no primeiro nivel)
					 */
					funcionalidade.setFuncionalidade_pai(retornaFuncionalidade(rs.getString("nu_funcionalidade_pai")));
				}
			}

		}catch(SQLException e){

			throw new Exception(e);
		}finally{
			releaseDAOObjects(conn, ps, rs);
		}

		return funcionalidade;
		
	}

o problema é que ele esta gerando uma lista com um objeto, e dentro desse objeto tenho outro objeto o pai desse objeto e assim sucessivamente, o que eu preciso e criar uma outra lista tirando os objetos pai dessa… poderiam em ajudar com isso???

obrigado a todos!!

Olha, não sei se entendi direito, mas se vc não quer incluir a funcionalidade pai dentro dos objetos basta comentar ou excluir as linhas:

        funcao.setFuncionalidade_pai(retornaFuncionalidade(rs.getString("nu_funcionalidade_pai")));

        funcionalidade.setFuncionalidade_pai(retornaFuncionalidade(rs.getString("nu_funcionalidade_pai")));   

Já ía esquecendo, para manter a funcionalidade use:

retornaFuncionalidade(rs.getString("nu_funcionalidade_pai");   

dwduncan obrigado por sua jauda mais, eu preciso deixar, pq este objeto é o pai do anterior,

explicando eu tenho uma quero que me retorna um item de menu, so que este intem tem um pai, e este pai tem outro pai, e assim suscessivamente, o que eu preciso e extrair isso na lista que eu monto, como explicado no meu post acima…

fico no aguardo!!

valew pela ajuda galera mais consegui resolver

[quote=tmeinel]valew pela ajuda galera mais consegui resolver

[/quote]

Blz tmeinel… agora você poderia postar a solução para futuros que passem pelo mesmo que você… essa é a idéia de Fórum… Colaboração, todos se ajudando… Sacou ???

Diga como resolveu essa nova modalidade da TI a “RECURSIVAIDADE”…

Abs [] e bons estudos…

Acho que “recursivaidade” ocorre quando programadores gostam tanto de recursividade, que começam a se achar os melhores. Então param de usar estruturas de repetição, e tornam todo código possível recursivo.

Acho que “recursivaidade” ocorre quando programadores gostam tanto de recursividade, que começam a se achar os melhores. Então param de usar estruturas de repetição, e tornam todo código possível recursivo.[/quote]

Além de deixar o código na maioria das vezes mais legível. :twisted:

Afinal, é muito mais fácil ler isso aqui:

public static void loop( int ini, int ate ) { if ( ini < ate ) { System.out.println( ini ); loop( ini+1, ate ); } }

Do que isso aqui:

for ( int i = 0; i < 10; i++ ) { System.out.println( i ); }

Brincadeiras a parte, só devemos ser recursivaidosos quando for necessário :slight_smile:

Acho que “recursivaidade” ocorre quando programadores gostam tanto de recursividade, que começam a se achar os melhores. Então param de usar estruturas de repetição, e tornam todo código possível recursivo.[/quote]
Dorga, tava pensando em escrever algo semelhante. huahuahuahua

Isso me lembra uma entrevista que fiz, havia um exercício que usava recursividade pra resolver um problema e pedia pra arruma-lo (estava errado, mas não pelo fato de usar recursividade).
Arrumei o método de forma bem enxuta e também adicionei uma sugestão iterativa.