JAVA Ordenar Vector Objectos

pdrnvs

Power Member
Boas,

A minha dúvida é a seguinte,
Eu tenho um vector de objectos e queria ordena-los em função de um objecto do tipo GregorianCalendar.
Por exemplo,

Meu Vector:

----------------------
pedro(nome)
17(idade)
data(objecto GregorianCalendar)
----------------------
ana(nome)
18(idade)
data(objecto GregorianCalendar)
----------------------
joao(nome)
19(idade)
data(objecto GregorianCalendar)
----------------------

Ou seja, eu quero ordenar o meu vector em função do objecto data(GregorianCalendar)
O meu código é este,

private void setOrdenar(){
Collections.sort (ListaPessoasE, new Comparator<Pessoa> () {
public GregorianCalendar compare (Pessoa a1, Pessoa a2) {
return a1.getData() - a2.getData();
}
});
}


Obrigado
 
Duas alternativas. Não testei mas vê lá se é isso!


Código:
import java.util.Collections;
import java.util.Comparator;
import java.util.GregorianCalendar;
import java.util.Vector;

public class Sorter {

	class Pessoa [COLOR="DarkOrange"]implements Comparable<Pessoa>[/COLOR] {
		// nome
		// idade
		GregorianCalendar date;

		public Pessoa(GregorianCalendar date) {
			this.date = date;
		}

		[COLOR="DarkOrange"]@Override
		public int compareTo(Pessoa o) {
			return this.date.compareTo(o.date);
		}[/COLOR]
	}

	public static void main(String[] args) {

		Vector<Pessoa> vector = new Vector<Pessoa>();
		
		//....

		[COLOR="DarkOrange"]Collections.sort(vector);[/COLOR] //EDIT

		[COLOR="YellowGreen"]Collections.sort(vector, new Comparator<Pessoa>() {

			@Override
			public int compare(Pessoa o1, Pessoa o2) {
				return o1.date.compareTo(o2.date);
			}

		});[/COLOR]

	}
}
 
Última edição:
Se quiseres pelo getTimeInMillis():
Código:
public class Pessoa implements Comparator<Pessoa>{
    private String nome;
    private GregorianCalendar nasc;

public int compare(Pessoa p1, Pessoa p2) {
        return (int)(p1.getNasc().getTimeInMillis()-p2.getNasc().getTimeInMillis());
    }
Código:
public class Main {
    public static void main(String[] args) {
        Vector<Pessoa> v = new Vector<Pessoa>();
        GregorianCalendar n1 = new GregorianCalendar(2007,2,1);
        GregorianCalendar n2 = new GregorianCalendar(2009,3,4);
        v.add(new Pessoa("joao",n1)); v.add(new Pessoa("pedro",n2));
        Collections.sort(v,new Pessoa());
        for (Pessoa p : v)
            System.out.println(p);
        }
    }
 
exactamente, eu faria com o getTimeInMillis

Apesar de ser uma implementação válida, isso é estar a reinventar a roda. Se verificarem a implementação do método Calendar.compareTo(Calendar anotherCalendar) vêm isto:

Código:
public int compareTo(Calendar anotherCalendar) {
	return compareTo(getMillisOf(anotherCalendar));
    }

...

private int compareTo(long t) {
	long thisTime = getMillisOf(this);
	return (thisTime > t) ? 1 : (thisTime == t) ? 0 : -1;
    }
 
Apesar de ser uma implementação válida, isso é estar a reinventar a roda. Se verificarem a implementação do método Calendar.compareTo(Calendar anotherCalendar) vêm isto:

Código:
public int compareTo(Calendar anotherCalendar) {
	return compareTo(getMillisOf(anotherCalendar));
    }

...

private int compareTo(long t) {
	long thisTime = getMillisOf(this);
	return (thisTime > t) ? 1 : (thisTime == t) ? 0 : -1;
    }

Foi o que me veio a cabeça sem olhar para a api, obviamente que tens razão, mas numa solução rápida aka martelada seria assim:002:
 
Back
Topo