Dúvida com list

9 respostas
M

olá pessoal
tenho um list onde preencho ele com um select do banco de dados

List<TDocumento> lstDocumentos = TDocumento.carregarDocumentos(jmain.terminal.getUsuario().getChaveJ_STC());
        for(TDocumento item: lstDocumentos) {

            modeloPrincipal.addRow( new Object[] {
                item.getCodBarras(),
                false,
                item.getCodigo()
            } ) ;

ele me retorna um list com 6 linhas conforme abaixo

1
3
1
1
2
2

como eu faço para ordenar ele e excluir os registros iguais (do item.getCodBarras() )
gostaria que ficasse apenas

1
2
3

obrigado

9 Respostas

jaboot

Engraçado o seu /code não funcionar… mas beleza.

Usa o Set. Ele garante a unicidade dos elementos. Dá uma procurada aqui no fórum sobre isso.

nel

Podes usar o Collections.sort(). Se fores passar diretamente a lista retornada do banco de dados, teria de implementar a interface Comparator e passa-la no sort. Ou simplesmente usar um TreeMap.

SortedMap<Integer, TDocumento> map = new TreeMap<Integer, TDocumento>();
List<TDocumento> lstDocumentos = TDocumento.carregarDocumentos(jmain.terminal.getUsuario().getChaveJ_STC()); 
for(TDocumento item: lstDocumentos) { 
  map.put(item);
}

for(TDocumento doc : map.keySet()) {
modeloPrincipal.addRow( new Object[] { 
doc .getCodBarras(), 
false, 
doc .getCodigo() 
} ) ; 
}

Creio que isso resolva seu problema. Sim, pode ser melhorado a perfomance, usado só um laço de repetição bla bla bla...fiz o código dentro do GUJ e é só para ter uma ideia :)

Abraços.

nel

jaboot:
Engraçado o seu /code não funcionar… mas beleza.

Usa o Set. Ele garante a unicidade dos elementos. Dá uma procurada aqui no fórum sobre isso.

Só que se ele usar um Set e o objeto dele só repetir o código de barras por exemplo e qualquer outra informação no objeto for diferente, o Set vai considerar que ele é um novo objeto e não um repetido.

F
List<Object> lstDocumentos = TDocumento.carregarDocumentos(jmain.terminal.getUsuario().getChaveJ_STC()); 

			    Map<Integer, TDocumento > map = new HashMap<Integer, TDocumento >();
			    for(TDocumento item: lstDocumentos) { 
			    	map.put(item.getCodBarras(), item);
			    }

			    List<TDocumento > tDocumentos = new ArrayList<TDocumento >(map.values());
			    for(TDocumento item: tDocumentos) { 

			    modeloPrincipal.addRow( new Object[] { 
			    item.getCodBarras(), 
			    false, 
			    item.getCodigo() 
			    } ) ;

assim funcionaria?

nel
filipechaves:
List<Object> lstDocumentos = TDocumento.carregarDocumentos(jmain.terminal.getUsuario().getChaveJ_STC()); 

			    Map<Integer, TDocumento > map = new HashMap<Integer, TDocumento >();
			    for(TDocumento item: lstDocumentos) { 
			    	map.put(item.getCodBarras(), item);
			    }

			    List<TDocumento > tDocumentos = new ArrayList<TDocumento >(map.values());
			    for(TDocumento item: tDocumentos) { 

			    modeloPrincipal.addRow( new Object[] { 
			    item.getCodBarras(), 
			    false, 
			    item.getCodigo() 
			    } ) ;

assim funcionaria?

Praticamente o que eu fiz, mas em resumo, a diferença básica é que eu usei Treemap e ai está usando um Hashmap, o que significa (sem entrar em detalhes), que o meu vai garantir que será ordenado e o seu não.

Ps: a garantia existe porque é um Wrapper (Integer) se fosse um object, a conversa seria diferente.

ribclauport

Nel, por favor daria para explicar melhor esta frase?

Pois se o objeto dele tiver implementado Comparable por codigo de barras, assim como hashCode e equals com base no codigo de barras, o problema não vai acontecer certo?

Obrigado pela atenção.

nel

Nel, por favor daria para explicar melhor esta frase?

Pois se o objeto dele tiver implementado Comparable por codigo de barras, assim como hashCode e equals com base no codigo de barras, o problema não vai acontecer certo?

Obrigado pela atenção.

Agora você disse tudo. A minha primeira resposta eu disse isso:

Se ele implementar a interface a conversa é bem diferente e basta usar o proprio Collections.sort(). Eu só quis exemplificar da forma mais simples, nada além disso.
Mas se ele quiser aprender mais, eu recomendo mesmo que ele faça essa implementação, é interessante.

Abraços.

ribclauport

Desculpe a falta de atenção, e obrigado pelo exclarecimento.

Att.

nel

ribclauport:
Desculpe a falta de atenção, e obrigado pelo exclarecimento.

Att.

Sem o menor problema, foi interessante o ponto de vista. Demonstrou ao nosso colega (que abriu o tópico) que há n formas de implementações que nos levam a um mesmo resultado e ambos (eu e você) citamos a possibilidade de implementar as interfaces Comparator/Comparable.

marcoscorso, procure por Comparator e Comparable aqui no GUJ, verá muitos tópicos.

Esse aqui, se não é o melhor tópico do GUJ sobre isso, está entre os melhores: http://www.guj.com.br/java/54036-comparator#284273

Abraços.

Criado 22 de março de 2012
Ultima resposta 22 de mar. de 2012
Respostas 9
Participantes 5