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 !!!