Ordenar ArrayList

5 respostas
J

Olá a todos!

Após realizar uma busca no meu banco de dados e filtrar aquilo que quero, adiciono todos os meus objetos em um arraylist.
Entretanto há momentos que eu precisarei trocar a ordenação dos valores dentro desse arraylist.
Como posso fazê-lo?
Para vocês entenderem, aqui está o meu Bean:

public class ContaPagarBean implements Serializable {
   private int id;
   private double valor;
   private String desc;
   private String credor;
   private String dataPagamento;
   private String dataCadastro;
   private String pago;
   private boolean atrasado;
   //tudo mais pra baixo....
}

A ordenação que preciso seria pela data de pagamento, no Bean ela está como String, porém já tenho um método para fazer a passagem para Date.
Li a respeito de um Comparator, porém ele só funciona com igualdades, isso?

Poderiam me ajudar?

Obrigado!

5 Respostas

edufera10

Velho, não acredito que seja possivel mudar o conteúdo entre as posições de uma lista, o que você poderá fazer mais facilmente é ordena-lo ao coloca-lo em uma tabela usando um sorter na lista(array) no momento da passagem dos dados para a tabela.

mathiasnw
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Teste implements Comparable<Teste>{

	private Integer x;
	private String f;
	
	public Teste(Integer x,String f) {
		this.x = x;
		this.f = f;
	}
	
	public int compareTo(Teste o) {
		return o.x.compareTo(this.x);
	}

	public static void main(String[] args) {
		List<Teste> list = new ArrayList<Teste>();
		list.add(new Teste(1,"Teste1"));
		list.add(new Teste(2,"Teste2"));
		Collections.sort(list);
	}
}
marcosharbs

criar uma classe que implemente a interface Comparator e sobrescreva o método compareTo vai ficar algo assim seu método:

public int compare(SeuTipoObjeto o1, SeuTipoObjeto o2) {
      return o1.dataAserComparada.compareTo(o2.dataAserComparada);
}

pronto seu comparator está pronto, agora para ordenar sua coleção usando ele faça o seguinte:

Collections.sort(seuArrayList, new SeuComparator());

e pronto sua coleção será ordenada pela data, abraço

J

Vou tentar e posto o resultado.

J

Perfeito, minha classe comparadora ficou assim:

public class CompareContaPagar implements Comparator<ContaPagarBean> {

    public int compare(ContaPagarBean o1, ContaPagarBean o2) {     
       Date date1 = null;
       Date date2 = null;
       try{
           String str1 = o1.getDataPagamento();
           String str2 = o2.getDataPagamento();
           date1 = Utils.strtoDate(str1);
           date2 = Utils.strtoDate(str2);           
       }catch (Exception e){
           System.out.println(e);
       }
       return date1.compareTo(date2);
    }

}

Agradeço a todos pela força!

Criado 10 de agosto de 2009
Ultima resposta 13 de ago. de 2009
Respostas 5
Participantes 4