Oie gente belezinha?
Nao estou conseguindo ordenar uma lista simples e queria ajuda de voces
alunos.sort((a, b) -> Integer.compare(a.getIdade(), b.getIdade()));
Essa lista de alunos é carregada automaticamente pelo mapeamento de entidades do hibernate
O curioso é que se eu carrego essa lista manualmente o mesmo codigo de ordenacao funciona
Usando o método sort de List alunos.sort((a, b) -> a.getIdade().compareTo(b.getIdade()));
J
Jessica_Lara
OI @aix eu ja estou usando o metodo .sort()
O problema deve estar na minha lista carregada pelo hibernate pq, como eu disse, eu consigo ordenar uma lista criada manualmente em um metodo main() com o mesmo trecho de codigo que citei:
alunos.sort((a, b) -> Integer.compare(a.getIdade(), b.getIdade()));
tem ideia do que pode ser nesse caso?
A
aix
como esta a query que busca essa lista?
J
Jessica_Lara
Na verdade é um findAll() de outra classe SalaDeAula
Os alunos são detalhes carregados automaticamente pelo hibernate em uma lista dentro de cada instancia de SalaDeAula. Dada uma SalaDeAula, eu populo uma tabela com os Alunos desta sala, os dados estao todos la corretamente. Unica coisa que falta é ordenar pela idade
A
aix
Você pode ordenar na mão essa lista ou já pega ela ordenado da query,em vez de um findAll deveria um ser findAllOderedByProperty();
E
Error
Não dá nenhum erro qdo faz isso?
D
diego12
Se manualmente funciona, talvez a lista q o hibernate traz não tenha a implementação correta do sort ou está bloqueando alterações na lista, então tente:
// cria uma nova listaList<Aluno>novaLista=newArrayList<>(alunos);novaLista.sort((a,b)->Integer.compare(a.getIdade(),b.getIdade()));
J
Jessica_Lara
@diego12 tambem acho que seja algo desse tipo pq o procedimento era pra ser algo relativamente simples, mas nao funciona … @aix nao posso fazer como vc disse pq a lista é carregada automaticamente atraves do mapeamento (é uma lista de detalhes, o findAll é executado para buscar os mestres)
@diego12 tentei fazer como disse mas nao deu jeito ainda mas acredito ser o caminho mesmo
pior que nao encontro a solucao de jeito nenhum minhas esperança estao aqui kkk
D
diego12
Quando é feito new ArrayList<>(alunos); a lista é copiada, então deveria funcionar
Verifique se as duas listas de alunos está correta dessa forma
System.out.println("Lista original");alunos.stream().forEach(a->System.out.println("Aluno: "+a.getNome()+" Idade: "+a.getIdade()));System.out.println("Nova lista ordenada");listAlunos.stream().forEach(a->System.out.println("Aluno: "+a.getNome()+" Idade: "+a.getIdade()));
Pode ser q na hora de exibir a lista esteja desordenando.
J
Jessica_Lara
Oiee @diego12 muito obrigada pela sua ajuda!!!
A ordenacao estava sendo feita de forma correta desde o inicio , por isso funcionava preenchendo a lista manualmente. Só que eu tinha um codigo errado aqui , que populava a tabela novamente sem a ordenacao e nao havia me dado conta, só fui me dar conta depois de fazer os testes como vc passouu