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])).