List nao ordena Java8 [RESOLVIDO]

12 respostas
J

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

12 Respostas

J

Up!

J

Ninguém mesmo? =/

A

Usando o método sort de List
alunos.sort((a, b) -> a.getIdade().compareTo(b.getIdade()));

J

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

como esta a query que busca essa lista?

J

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

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

Não dá nenhum erro qdo faz isso?

D

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 lista
List<Aluno> novaLista = new ArrayList<>(alunos);
novaLista.sort((a, b) -> Integer.compare(a.getIdade(), b.getIdade()));
J

@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

Quando é feito new ArrayList<>(alunos); a lista é copiada, então deveria funcionar

Poderia tentar convertendo em array

Aluno[] arrayAlunos = alunos.toArray(new Aluno[alunos.size()]);
Arrays.sort(arrayAlunos, (a, b) -> Integer.compare(a.getIdade(), b.getIdade()));
List<Aluno> listAlunos = Arrays.asList(arrayAlunos);

ou usando stream

List<Aluno> listAlunos = alunos.stream()
    .sorted((a, b) -> Integer.compare(a.getIdade(), b.getIdade()))
    .collect(Collectors.toList());

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

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

Obrigadaaa está resolvido!!!

Criado 27 de março de 2016
Ultima resposta 28 de mar. de 2016
Respostas 12
Participantes 4