Selecionar linha de uma ArrayList para mostrar numa grid [Resolvido]

6 respostas
renato1010

Olá pessoal;

To garrado num problema aqui que parece ser simples, porém não consegui resolver…

Tenho o seguinte trecho de código:

ArrayList<CdVeiculoVO> voListVeic = (ArrayList<CdVeiculoVO>) retornoLoadVeic.getRows();

                for (int i = 0; i < voListVeic.size(); i++) {

                     getGrid().getGridControl_Veiculo().getVOListTableModel().addObject(voListVeic.get(i));
                }

Esse codigo aí ta recebendo os valores de uma consulta (retornoLoadVeic) e jogando eles num ArrayList. Depois pega os valores e joga tudo numa grid, que está exibindo os dados normalmente.

Os dados obtidos dessa consulta vem de uma tabela de veiculos que tem os seguintes campos:
id_veiculo, transportadora_fk, cliente_fk, marca_veic, modelo_veic, placa_veic, dataaltera_veic.

Está funcionando legal, agora, em uma determinada situação eu preciso filtrar os dados antes de coloca-los na grid.
Ou seja, gostaria que fosse pra grid apenas os dados referentes a um determinado cliente, por exemplo o cliente_fk = 19.
Como fazer esse filtro buscando no ArrayList e jogando no grid somente os dados que quero?
Lembrando que todos os dados ja estão no ArrayList e que so preciso buscar nesse mesmo ArrayList o que eu quero, como no exemplo, eu queria pegar no ArrayList e mostrar na grid so os veiculos que tivessem o cliente_fk = 19.

Tentei de algumas formas aqui com if(), mas não consegui fazer funcionar.

Alguem tem alguma idéia de como resolver isso?

Acho que não vem ao caso, mas para complementar, estou usando Hibernate e OpenSwing no NetBeans 7.0

Desde já, agradeço a atenção.

6 Respostas

drsmachado

Você precisará percorrer a ArrayList e comparar, item a item, qual possui o atributo que você deseja.

natureza

Opa !

O Mais correto é fazer isto via consulta, seja ela HQL, SQL ou Criteria.

Pois veja bem, você quer apenas o cliente x.

Ficaria ( No caso de sql ) - select * from clientes where cliente_fk = 19

Isso seria a maneira mais correto por causa de performace.

Caso você queira mesmo filtrar no arraylist você pode criar uma lista nova.

Iterar a lista com todos os dados, e verificar quais são do cliente 19 e adicionar nesta nova lista.

E popular sua grid com ela.

Esclareceu?

natureza

Ou então remover os que são diferentes do cliente 19.

Mais ou menos assim:

for (Iterator iterator = voListVeic.iterator(); iterator.hasNext();) { CdVeiculoVO veiculos = (CdVeiculoVO) iterator.next(); //19L no caso de ser Long if(!veiculos.getCliente().getId().equals(19L)){ iterator.remove(); } }

renato1010

Entendi o que vc disse, mas nesse caso como eu faria essa iteração para achar os itens que fossem do cliente 19?
O que eu não to conseguindo eh justamente fazer esse filtro no ArrayList.

Eu to querendo pegar no ArrayList mesmo pq os dados ja estão la, dessa forma reduziria o acesso ao banco.

renato1010

Ha sim, Natureza, entendi, postei antes de vc colocar.

Vou tentar aqui e posto o resultado.

renato1010

Funcionou aqui, usei a dica do amigo Natureza e matei a zica.

Mto obrigado…

Criado 29 de junho de 2011
Ultima resposta 29 de jun. de 2011
Respostas 6
Participantes 3