dúvida compareTo

Galera alguém pode me explicar de maneira simples o retorno do método compareTo …

duma maneira simples o compareTo retorna valores inteiros…
para a comparação de um objecto da classe com o objecto que recebe como parametro.

se o objecto que receber como parametro for igual retorna 0; se for maior retorna >0 e se for menor retorna <0.

Tambem podes redefinir o compareTo para retornar os valores que quiseres desde que sejam eles inteiros…

basta no cabeçario da tua classe escreves.

public class xpto extends CompareTo{}

e ai definis os valores que quiseres kuando o objecto do parametro é maor , menor ou igual…

Valeu cara…Simple e objetivo…

Tenho uma pergunta a respeito do código abaixo:

Esse código ele está ordenando somente por Terminal, mas acontece que dentro de cada terminal tenho as datas que precisam também estarem ordenadas por exemplo:

Essa é a maneira que ele está ordenando (Errado):

Essa é maneira correta que eu preciso ordenar:

Classe Teste

 
TreeSet terminais = new TreeSet();

   for (Iterator iterator = lista.iterator(); iterator.hasNext();) 
  {
      Dado dado = (Dado)iterator.next();
       terminais.add(dado);
  }

Classe Dado


   public boolean equals(Object obj) 
   {
      Dado dado = (Dado)obj;

      if ((getData()+getTerminal()).equals((dado.getData()+dado.getTerminal())))
      {

         return true;

      }else
            {
		return false;
		
             }
	}

   public int compareTo(Dado o) 
  {
			
	int compare = (this.terminal+this.data).compareTo(o.terminal+o.data);		
	return compare;
				
   }

Desconsiderem o método public boolean…Ele não é utilizado na ordenação…

[code]public int compareTo(Dado o) {
int comparator
if ((this.terminal+this.data)==(o.terminal+o.data)){
compare=0; }
else if ((this.terminal+this.data)<(o.terminal+o.data))){
comparator=-1;}
else if ((this.terminal+this.data)>(o.terminal+o.data))
{comparator=1; }

return comparator;
} [/code]

nao testei este codigo mas o Compareto deve ser implementado mais ou menos assim…para devolver os valores >0; <0 ==0;

Na verdade você deve implementar a interface Comparable:

public MinhaClasseComparavel implements Comparable{}

E na sua classe sobreescrever o método compareTo().
Nesse método você define quando um objeto da sua classe é maior, menor ou igual(em nível de procedência).
Por exemplo a classe String implementa a interface COmparable e define no método compareTo() quando uma String é maior/menor/igual a outra.
“Joao” vem antes de “Maria”, logo “Joao”.compareTo(“Maria”) = -1.

E na suas classes, você é quem vai definir, por exemplo, quando um objeto Usuario vem antes de outro objeto Usuário (baseado no username, no nome, na idade, etc…).

E você utiliza isso geralmente para coleções ‘sorted’, que tem uma determinada ordenacao, como num TreeSet

[quote=efcjunior]public int compareTo(Dado o) { int compare = (this.terminal+this.data).compareTo(o.terminal+o.data); return compare; }
[/quote]
Muito estranho, mas consigo ver como funciona. Só funciona por que terminal é String.

Tipo os dados que você quer ordenar são string ?

A classe string implementa a inteface comparable, então basta utilizar-se dela

se for tente:

public class SuaClasse implements Comparable<Dado> {

...

    /* Ordena a lista <Dado > pela descrição */
    @Override
    public int compareTo(Dado other) {
        return (this.terminal+this.data).compareTo(other.terminal+other.data);
   }

a parte de concatenação da string fica por sua conta ^^ Se quise utilizar o método concat… etc… funciona também…

Pra fazer uma segunda ordenação, use também a interface Comparator.

Não entendi Rafael.

Essa é a minha classe Dado…Qual a sugestão ?

package padrao;

import java.math.BigDecimal;
import java.util.Date;

//classe que representa o mapeamento da tabela.

public class Dado implements Comparable<Dado>{
	
	private String terminal;
	private Date data;
	private Long agencia;
	private Long conta;
	private Integer via;
	private BigDecimal valor;

	
	public String getTerminal() {
		return terminal;
	}
	public void setTerminal(String terminal) {
		this.terminal = terminal;
	}
	
	public Date getData() {
		return data;
	}
	public void setData(Date data) {
		this.data = data;
	}
	public Long getAgencia() {
		return agencia;
	}
	public void setAgencia(Long agencia) {
		this.agencia = agencia;
	}
	public Long getConta() {
		return conta;
	}
	public void setConta(Long conta) {
		this.conta = conta;
	}
	public Integer getVia() {
		return via;
	}
	public void setVia(Integer via) {
		this.via = via;
	}
	public BigDecimal getValor() {
		return valor;
	}
	public void setValor(BigDecimal valor) {
		this.valor = valor;
	}
	
	
	public int compareTo(Dado o) {
		
		int compare = (this.terminal+this.data).compareTo(o.terminal+o.data);
		
		return compare;
	}
	
}

Aí galera, quem quiser debugar para me ajudar está aí a classe que contém o main…

package padrao.novo;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;

import padrao.Dado;


public class Tratador {


	public List<Dado>retornoConsulta() throws ParseException{
		
		List<Dado>listDados = new ArrayList<Dado>();
		DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		

		//1 dado:
		Dado dado1 = new Dado();
		dado1.setAgencia(new Long(128));
		dado1.setConta(new Long(6029));
		dado1.setData(format.parse("01/01/2008"));
		dado1.setVia(new Integer(0));
		dado1.setTerminal("1");
		dado1.setValor(new BigDecimal(100));
		
		//2 dado:
		Dado dado2 = new Dado();
		dado2.setAgencia(new Long(128));
		dado2.setConta(new Long(6029));
		dado2.setData(format.parse("01/01/2008"));
		dado2.setVia(new Integer(0));
		dado2.setTerminal("1");
		dado2.setValor(new BigDecimal(200));
		
		//3 dado:
		Dado dado3 = new Dado();
		dado3.setAgencia(new Long(128));
		dado3.setConta(new Long(6029));
		dado3.setData(format.parse("12/10/2006"));
		dado3.setVia(new Integer(0));
		dado3.setTerminal("1");
		dado3.setValor(new BigDecimal(300));
		
		//4 dado:
		Dado dado4 = new Dado();
		dado4.setAgencia(new Long(128));
		dado4.setConta(new Long(6029));
		dado4.setData(format.parse("12/10/2007"));
		dado4.setVia(new Integer(0));
		dado4.setTerminal("1");
		dado4.setValor(new BigDecimal(500));
		
		//5 dado:
		Dado dado5 = new Dado();
		dado5.setAgencia(new Long(128));
		dado5.setConta(new Long(6029));
		dado5.setData(format.parse("12/10/2007"));
		dado5.setVia(new Integer(0));
		dado5.setTerminal("2");
		dado5.setValor(new BigDecimal(200));
		
		//6 dado:
		Dado dado6 = new Dado();
		dado6.setAgencia(new Long(128));
		dado6.setConta(new Long(6029));
		dado6.setData(format.parse("12/10/2007"));
		dado6.setVia(new Integer(0));
		dado6.setTerminal("2");
		dado6.setValor(new BigDecimal(400));
		
		//7 dado:
		Dado dado7 = new Dado();
		dado7.setAgencia(new Long(128));
		dado7.setConta(new Long(6029));
		dado7.setData(format.parse("25/11/2007"));
		dado7.setVia(new Integer(0));
		dado7.setTerminal("2");
		dado7.setValor(new BigDecimal(400));
		
		//8 dado:
		Dado dado8 = new Dado();
		dado8.setAgencia(new Long(128));
		dado8.setConta(new Long(6029));
		dado8.setData(format.parse("25/11/2007"));
		dado8.setVia(new Integer(0));
		dado8.setTerminal("2");
		dado8.setValor(new BigDecimal(400));
		
		listDados.add(dado1);
		listDados.add(dado5);
		listDados.add(dado6);
		listDados.add(dado7);
		listDados.add(dado8);
		listDados.add(dado4);
		listDados.add(dado3);
		listDados.add(dado2);
		
		
		return listDados;
	}
	
	
	public static void main(String[] args) throws ParseException {
		
		// TODO Auto-generated method stub
		Collection lista = new Tratador().retornoConsulta();
		float soma = 0;
		//HashSet terminais = new HashSet();
		TreeSet terminais = new TreeSet();
		
		for (Iterator iterator = lista.iterator(); iterator.hasNext();) {
			Dado dado = (Dado)iterator.next();
			terminais.add(dado);
		}

	}

E aí galera, responde se pelo menos existe solução, no mínimo um sim ou não por gentileza…

obrigado.

[quote=efcjunior]E aí galera, responde se pelo menos existe solução, no mínimo um sim ou não por gentileza…

obrigado.[/quote]
O que você quer fazer mesmo?

[quote=Bruno Laturner][quote=efcjunior]E aí galera, responde se pelo menos existe solução, no mínimo um sim ou não por gentileza…

obrigado.[/quote]
O que você quer fazer mesmo?[/quote]

Esta duas classes que eu coloquei acima são as que eu estou utilizando, somente… E mais em cima eu relato como eu quero exibir os dados.

Obrigado…

[code]/**

  • Compara pelo Nome do Terminal e Data
    */
    public int compareTo(Dado o)
    {
    int compare = this.terminal.compareTo(o.getTerminal());

if (compare != 0)
return compare;

return this.data.compareTo(o.getData());
}[/code]
Seria isso?

UHUUHUHUHU !!!
Cara, muito obrigado mesmo…VALEU , VALEU E VALEU !!!