Ordenar list com vários atributos  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
francis.junio
JavaTeenager
[Avatar]

Membro desde: 19/01/2010 13:56:16
Mensagens: 152
Offline

Boa tarde,

Preciso de uma ajuda...

Tenho uma lista de objetos pessoa. Em cada objeto da lista tem o nome, idade, rg, cidade, profissao, data de nascimento...

Quero ordenar esta lista conforme o usuário escolhe:
Ele pode querer ordenar por cidade e profissao ou somente por nome. O atributo de ordenação é dinâmico e a cada consulta ele pode escolher a ordenção por um atributo ou vários.
Isso é possível? Alguém tem idéia? Achei mt coisa na net, mas é somente um atributo fixo.

Obrigado!

This message was edited 2 times. Last update was at 26/07/2010 16:12:36

Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1694
Offline

Pesquise por Collections.sort http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/util/Collections.html e a interface Comparator http://download.oracle.com/docs/cd/E17476_01/javase/1.5.0/docs/api/java/util/Comparator.html .

Abraços.
luizsodrerj
HelloWorld

Membro desde: 28/06/2010 12:54:20
Mensagens: 11
Offline

Acho que da pra fazer com um Comparator personalizado.
Por exemplo:


Daí então voce pode utilizar da seguinte forma:


abração

[MSN]
jakefrog
GUJ Expert
[Avatar]

Membro desde: 22/01/2007 22:00:53
Mensagens: 4181
Offline

luizsodrerj wrote:Acho que da pra fazer com um Comparator personalizado.
Daí então voce pode utilizar da seguinte forma:



Exato. na hora do sorte, vc busca no request oq foi que o cliente escolheu.

Eu sei também que existem bibliotecas que fornecem grids que vc pode ordenar sem precisar mandar outro request. Pena que esqueci o nome, lembro que ele coloca as setas na coluna e depois ordena apenas por clicar.

Manda um google nisso ae que tu acha. [=

Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]

SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)

Vamos em frente que atrás vem gente!
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Como o java não tem nada tão legal quando o LINQ do .Net, você será obrigado a criar um comparator para cada atributo que você quiser ordenar. Esse link explica em detalhes a teoria disso:
http://www.guj.com.br/posts/list/45985.java#241201

Se você quiser ordenar esse list para exibir num JTable, dê uma olhada no auto-filtro, no meu link.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
francis.junio
JavaTeenager
[Avatar]

Membro desde: 19/01/2010 13:56:16
Mensagens: 152
Offline

Bom dia,

Pelo que pesquisei só existe uma ordenação por vez (nome ou codigo).
Terei que ordernar primeiro por nome e depois comparar todos os nomes que são iguais (comparator) e ir ordenando a descrição e ir jogando na lista.
É isso?
Obrigado
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Para ordenar por dois atributos ao mesmo tempo, basta escrever um Comparator para isso:



Uma lista contendo:
Curitiba, Engenheiro Civil, Marcio
Curitiba, Analista de Sistemas, Vinicius
Anápolis, Zootecnico, Pedro
Curitiba, Veterinário, Marcelo
Curitiba, Engenheiro Civil, Andreia
Anápolis, Botânico, Laura

Ficaria ordenada usando aquele comparador assim:
Anápolis, Botânico, Laura
Anápolis, Zootecnico, Pedro
Curitiba, Analista de Sistemas, Vinicius
Curitiba, Engenheiro Civil, Andreia
Curitiba, Engenheiro Civil, Marcio
Curitiba, Veterinário, Marcelo

Como você quer filtros dinâmicos, ainda recomendo o uso de um JTable no lugar de um JList, e da classe de auto-filtro, do link abaixo. Ela não só faz ordenação como filtragem também, igualzinho ao MS Excel. Usuários tendem a gostar muito dela.

This message was edited 2 times. Last update was at 26/07/2010 12:46:14


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
francis.junio
JavaTeenager
[Avatar]

Membro desde: 19/01/2010 13:56:16
Mensagens: 152
Offline

Boa tarde,

Vou receber uma lista contendo a ordem que terei que ordenar meu list.
Como não sei quantos parametros o usuário vai querer ordenar fiz um Case.
Se o tamanho da lista for 2, vou entrar no case 2 e Ordenar primeiro por cidade e depois por nome.




Como eu não sei a sequência que o usuário vai querer ordernar, o parametro1 seria a primeira escolha (nome ou cidade) e o segundo a segunda escolha assim sucessivamente...
Isso é possível?




Obrigado
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team