Gostaria de dica para ordenar objeto

Ola pessoal, tenho um problema para ordena um objeto, que tem um nome e uma data, preciso ordenar pela data, esses objetos estão em um arraylist, como faço para ordenar pela data. Pois já vi varios exemplos, porem não entendi bem como funciona, se um objeto de apenas um elemento data, valor, ou nome, seria facil. porem tenho, data, nome e outros campos variaveis nesse objeto.

cheguei a ver esse exemplo, porem não entendi como ele gera uma nova lista de objetos ordenados.

public class OrdenarObj implements Comparator{
    
    String formato1 = "yyyy-MM-dd HH:mm:ss";
    DateFormat form = new SimpleDateFormat(formato1);
    Date data1, data2 = null;
    
   public int compare ( Object o1, Object o2 )   {

        try {

            String date1 = form.format(o1); //Data para String
            String date2 = form.format(o2); //Data para String
            
            data1 = (Date) form.parse(date1);
            data2 = (Date) form.parse(date2);


        } catch (ParseException ex) {
            Logger.getLogger(OrdenarObj.class.getName()).log(Level.SEVERE, null, ex);
        }
   
        return data1.compareTo(data2);        
    }      
}
 
            lista_obj_ok = lista_objetos;
            OrdenarObj sort = new OrdenarObj();
            
            Objlog ob = new Objlog();
            for(int i=0; i < lista_obj_ok.size(); i++){
                ob =  (Objlog) lista_obj_ok.get(i);

                Date data1str = ob.getDatahora();
                Date data2str = ob.getDatahora();
               
                sort.compare(data1str,data2str);
                                
            }
            
          // como faria para obter minha lista de objetos organizada apos o for.

Como faria para obter minha lista organizada no final do for.

desde já agradeço.

Batista

Eu faria mais simples, visto que as datas são strings nesse padrão que você falou, é só ordenar uma List de Strings (datas) com o método Collections.sort(lista);

[code]import java.util.ArrayList;
import java.util.Collections;

public class OrdenaDatas {
//datas no padrão “yyyy-MM-dd HH:mm:ss”;
public static ArrayList ordenaDatas(ArrayList datas) {
Collections.sort(datas);
return datas;
}

public static void main(String[] args) {
	ArrayList<String> datas = new ArrayList<String>();
	datas.add("1980-02-28 00:30:21");
	datas.add("1980-04-28 00:32:21");
	datas.add("1980-02-28 10:01:10");
	datas.add("1980-03-28 00:30:21");
	datas.add("1981-02-28 00:32:21");
	datas.add("1981-02-28 10:02:10");
	
	for (String d : datas) {
		System.out.println(d);
	}

	System.out.println("Ordenando...");
	ordenaDatas(datas);
	
	for (String d : datas) {
		System.out.println(d);
	}
}

}[/code]

Espero ter ajudado.

[quote=dionat4n]Eu faria mais simples, visto que as datas são strings nesse padrão que você falou, é só ordenar uma List de Strings (datas) com o método Collections.sort(lista);

[code]import java.util.ArrayList;
import java.util.Collections;

public class OrdenaDatas {
//datas no padrão “yyyy-MM-dd HH:mm:ss”;
public static ArrayList ordenaDatas(ArrayList datas) {
Collections.sort(datas);
return datas;
}

public static void main(String[] args) {
	ArrayList<String> datas = new ArrayList<String>();
	datas.add("1980-02-28 00:30:21");
	datas.add("1980-04-28 00:32:21");
	datas.add("1980-02-28 10:01:10");
	datas.add("1980-03-28 00:30:21");
	datas.add("1981-02-28 00:32:21");
	datas.add("1981-02-28 10:02:10");
	
	for (String d : datas) {
		System.out.println(d);
	}

	System.out.println("Ordenando...");
	ordenaDatas(datas);
	
	for (String d : datas) {
		System.out.println(d);
	}
}

}[/code]

Obrigado pela ajuda, mais não é tão simples assim. Eu tenho um objeto com uma data e varios outros campos, da forma que você disse eu deveria ter um objeto apenas de datas.
Cheguei a encontrar a forma correta porem não consegui ainda resolver, tenho duvida na comparacao de datas para que seja ordenada, vou postar o codigo que tenho que corrigir para fazer o que quero.

import java.util.Comparator;

public class ComparatorCliente implements Comparator {
    
  public int compare(Object meuObjeto, Object outroObjeto) {
      
    Date data1 = ((Cliente) meuObjeto).getData();
    
    Date data2 = ((Cliente) outroObjeto).getData();
    
    return data1.compareTo(data2);
  }

 // Meu problema esta nesse codigo, para ordenar as datas
 //desta forma não esta funcionando
 //tem alguma ideia? 
  
}

Espero ter ajudado.[/quote]

Tem que implementar a interface Comparable e não Comparator.
Cada objeto deve ter uma data apenas, entre os outros campos que tu quiser.
Fazendo a chamada Collections.sort(lista); ordena tudo que foi adicionado a lista com um mergesort.
Espero que tenha ajudado agora… =)

[code]import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

public class OrdenarObj implements Comparable {

private Date date = null;

public OrdenarObj(Date data) {
	this.date = data;
}

public int compareTo(OrdenarObj o) {
	String formato1 = "yyyy-MM-dd HH:mm:ss";
	DateFormat form = new SimpleDateFormat(formato1);
	
	Date data2 = null;
	
	try {
		String date1 = form.format(this.date); //Data para String  
		String date2 = form.format(o.getDate()); //Data para String  

		this.date = form.parse(date1);
		data2 = form.parse(date2);

	} catch (ParseException ex) {
		Logger.getLogger(OrdenarObj.class.getName()).log(Level.SEVERE,
				null, ex);
	}

	return this.date.compareTo(data2);
}

public String toString() {
	return this.date.toString();
}

public Date getDate() {
	return this.date;
}

public void setDate(Date data) {
	this.date = data;
}

public static void main(String[] args) {
	ArrayList<OrdenarObj> lista = new ArrayList<OrdenarObj>();
	
	lista.add( new OrdenarObj(new Date(2008-1900,3,30,8,20)) );
	lista.add( new OrdenarObj(new Date(2007-1900,3,30,8,21)) );
	lista.add( new OrdenarObj(new Date(2008-1900,2,20,8,20)) );
	lista.add( new OrdenarObj(new Date(2008-1900,1,30,3,23)) );	
	
	Collections.sort(lista);
	
	for(OrdenarObj d : lista) {
		System.out.println(d);
	}
}

}[/code]