Preciso manipular mais de uma List e emparelhá-las para que os tipos de informações fiquem equivalentes na mesma posição em cada List.
Entenderam? Não? Vamos lá…
List a = {maça, 20, vermelha}
onde na posição 0 temos o tipo da fruta, na posição 1 a quantidade, na posição 2 a cor
List b = {laranja, brasileira, 32, laranja}
onde na posição 0 temos o tipo da fruta, na posição 1 a nacionalidade, na posição 2 a quantidade e na posição 3 a cor
Tenho que fazer uma lógica que deixe estas duas listas assim:
[quote] ATRIBUTO-------| Lista | Listb-|
Tipo da fruta----|-----maça------| laranja---------|
Nacionalidade—|-----------------| brasileira------|
Quantidade------|-----20---------| 32--------------|
Cor---------------|----vermelho–|--laranja--------|[/quote]
Percebam que onde encontrarmos um atributo em uma lista e não encontramos na outra, na lista onde este atributo não existe a posição deve ser deixada em branco (ou null);
A lógica deve estar preparada para receber de 2 a mais listas…
faça um objeto fruta com todos os seus atributos, depois crie as 2 listas e vá adicionando os objetos nelas, o que não tiver ele vai ficar null mesmo, depois varra as listas comparando os objetos que elas contém…
O mais simples, na minha opinião, é implementar o Comparator, assim, podes utilizar o método sort da Collections, que lhe fará todo o “serviço”.
A ideia de criação de um objeto é interessante, mas não seria um objeto “fruta”, mas podes criar um Enum, por exemplo, ou simplesmente um objeto com dois campos, uma inteiro e uma String.
No campo inteiro um “type”, onde você vai definir o tipo de informação, e o String, onde será o valor em si.
Por exemplo:
1 - Fruta
2 - Quantidade
3 - Cor
4 - Qualquer
Assim, você consegue organizar sua lista perfeitamente, duas ou mais, inclusive.
O método sort da classe Collections implementa um Comparator, segue exemplo aqui
vc vai ter que fazer um método que compara estas listas meio genérico…
uma ideia que é meio cabulosa mas que de pra fazer, é, depois de adicionado o objeto na lista, vc pegue esta lista e adicione em outra, depois no método nos laços, vc vai saber quantas listas vai ter e vai ir conseguindo comparar todas as listas…
import java.util.Comparator;
import br.com.xxxxx.vo.FrutasVO;
public class ComparaLista implements Comparator<FrutasVO>{
@Override
public int compare(FrutasVO fruta1, FrutasVO fruta2) {
return fruta1.getNomeFruta().compareTo(fruta2.getNomeFruta());
}
}
Na minha classe atual:
...
ComparaLista comparaLista = new ComparaLista();
Collections.sort(tipoFiltroComFrutas.getListItens(), comparaLista);
...
Desta forma consigo manter minhas listas de Frutas ordenadas por ordem alfabéticas.
Mas e quando uma das listas não tiver um dos atributos, se não tiver nacionalidade por exemplo? Preciso deixar esta posição nula para que a exibição da tabela fique correta
Qual o contéudo da sua VO?
E veja, você está levando como critério para ordenação, exclusivamente o nome da fruta, você deve ficar atento as suas necessidades.
Para o seu caso, não basta comparar somente o nome, há outro atributos a serem comparados antes de retornar um determinado valor, perfeito?
Poste o seu objeto VO.
Ainda aconselho a usar apenas os dois parametros com indiquei, “type” e “value”.
Abraços.
import java.util.Comparator;
import br.com.xxxxx.vo.FrutasVO;
public class ComparaLista implements Comparator<FrutasVO>{
@Override
public int compare(FrutasVO fruta1, FrutasVO fruta2) {
if(fruta1.getNomeFrute() == null && !fruta2.getNomFruta() != null){
return 1;
}
return fruta1.getNomeFruta().compareTo(fruta2.getNomeFruta());
}
}
Nessa considerei que as frutas com nome null serão maiores e devem ser listadas primeiro.
vc tem que fazer as comparações se forem ambas null retorna 0 e se fruta1 for != null e fruta2 == null (inverso do if) vc retorna -1.
As frutas são persistidas sim, mas a ordenação que estou buscando não será persistida. Apenas quando exibo a tabela de frutas na tela busco esta informação do BD, como são diversas frutas, preciso fazer esta lógica para emparelhar as informações e exibir na tela como mostrei na abertura do tópico…
Vocês estão me ajudando bastante mais ainda não consegui fazer o que preciso.
Vou explicar melhor a situação:
Eu já tenho as listas de frutas preenchidas e quero fazer uma tabela comparando os atributos de cada fruta.
O que eu preciso é fazer tipo um “merge” mas ao invés de pegar a informação que não tem um uma lista e copiar na outra, só preciso deixar a posição equivalente com valor null
Como estou exibindo a tabela hoje
[quote]ATRIBUTO-------| Lista | Listb-|
Tipo da fruta----|-----maça------| laranja---------|
Nacionalidade—|-----20---------| brasileira------|
Quantidade------|----vermelho–| 32--------------|
Cor---------------|-----------------|–laranja--------|
[/quote]
Como eu preciso exibir
[quote]ATRIBUTO-------| Lista | Listb-|
Tipo da fruta----|-----maça------| laranja---------|
Nacionalidade—|-----------------| brasileira------|
Quantidade------|-----20---------| 32--------------|
Cor---------------|----vermelho–|--laranja--------|[/quote]