Como retornar elemento por elemento de uma lista encadeada

Boa noite, estou precisando coletar todos os id’s de um objeto pra fazer algo, mas sempre retorna só o primeiro elemento da lista, porque isso acontece?

 public int recuperoIds() {
    		No aux = inicio;
    		while(aux != null) {
    			int idsUsados = aux.obj.getId();
    			aux = aux.prox;
    			return idsUsados;
    		}
    		return 0;
    	}

Ele só retorna o primeiro porque quando o return é executado, ele retorna o valor e sai do método (não executa mais nada que tem ali).

Então o seu código entra no while, pega o primeiro ID e já encontra um return. Com isso, o método retorna o valor do ID e não executa mais nada do método.


Enfim, se você quer todos os ID’s, então deveria retornar um array ou uma lista. Por exemplo:

public List<Integer> recuperoIds() {
    List<Integer> listaIds = new ArrayList<>();
    No aux = inicio;
    while (aux != null) {
        // adiciona o ID na lista
        listaIds.add(aux.obj.getId());
        aux = aux.prox;
    }
    // retorna a lista com todos
    return listaIds;
}

Uma característica da lista é que você pode adicionar elementos sem se preocupar com o tamanho, pois a própria lista já vai alocando mais espaço conforme a necessidade - e no caso de listas ligadas, acho que é o mais adequado, pois dependendo da implementação você não sabe o tamanho sem percorrê-la (como não ficou claro se você tem a informação do tamanho, deixei assim mesmo - se você soubesse o tamanho de antemão, poderia usar um array (int[] ids = new int[tamanho])).

Obrigado! Mas por coincidência eu tinha pensado nessa mesma solução!

Tava com medo de ser uma espécie de gambiarra… kkk

Por que gambiarra? Se tem que retornar mais de um, uma lista é uma solução perfeitamente adequada…:slight_smile: