Ordenamento de vetores

Mantu, vou te falar que ficou muito bom o codigo.
O debug funcionou bem e o codigo também
Tinha esquecido do TreeSet e nao sabia tamanho o poder! :shock: .
Gostei muito.
Esta na minha hora de almoco, esta funcionando. Porem ja pensei alguns otimizacoes e melhoracao no codigo.
Daqui 1 hora eu volto e posto o que vou fazer.
Aguarde meu feedback amigo…

Abracos!

Seria otimo ter artigos com sua autoria.
Voce tem excelente didatica.
Abracao!

Os 2 daos continuam me retornando uma list, porem mudei a assinatura de um deles para aceitar um TreeSet.
DAO:

public List<PessoaFisica> selectPessoaById(TreeSet id) { return session.createCriteria(PessoaFisica.class) .add(Restrictions.in("codPessoa", id)) .list();

ConsultaAction:

// uma lista de consultas
        consultas = consultaManager.findByExample(consulta); 

        TreeSet<Integer> setClientes = new TreeSet<Integer>();

// aqui crio um TreeSet com os ID dos clientes, sem pegar os repetidos       
        for (Consulta consulta : consultas) {
            setClientes.add(Integer.valueOf(consulta.getCliente()));
        }

// Usando o dao acima pego os clientes do Banco Pessoa. A Ideia é so usar o ID e o Nome
        TreeSet<PessoaFisica> setlistaCliente =
                new TreeSet<PessoaFisica>(consultaManager.selectPessoaById(setClientes));

//Crio uma lista com os dados da lista consulta substituindo os ID pelos Nomes dos clientes.
        for (Consulta consulta : consultas) {
            PessoaFisica dummy = new PessoaFisica();
            dummy.setCodPessoa(Integer.valueOf(consulta.getCliente()));
            if (setlistaCliente.contains(dummy)) {
                consulta.setCliente(setlistaCliente.tailSet(dummy).first().getNome());
                consultasNormalizado.add(consulta);
            }
        }

A class Cliente, mudou o nome para PessoaFisica.

Pessoa é uma superclass de PessoaFisica, e PessoaFisica herda o codPessoa(ID) de pessoa. Logo, fiz o equals e compareTo em Pessoa, Ok?

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Pessoa) {
            Pessoa pessoa = (Pessoa) obj;
            return pessoa.getCodPessoa() == this.getCodPessoa();
        }
        return false;
    }

    @SuppressWarnings({"UnnecessaryBoxing"})
    public int compareTo(Pessoa o) {
        if (o == null) {
            throw new ClassCastException("Nao pode ser comparado");
        }
//Fiz esse Boxing porque preciso de Integer, o que achou?
        return Integer.valueOf(codPessoa - o.codPessoa);
    }

Venda trocou de nome e agora se chama Consulta.

public boolean equals(Object obj){
 		if(!(obj instanceof Consulta))
 			return false;

 		Consulta other = (Consulta)obj;
 		return id == other.id;
 	}

Não manjo de Hibernate, mas parece que ficou massa!
:thumbup:

Vou te confesar que ficou muito melhor e mais facil de ler (para outros programadores claro) desse modo do que do outro que eu usava 2 foreach.

E ficou com mais desempenho, pois controlo tudo no meu modelo e nao mato meu Banco.

Amigo, tudo graca a voce!

Obrigado pela dedicacao!

Artigo sobres esse assuntos seria otimo, sabia?
Tem interesse?

Mantu, desculpe a minha ignorância mas estou tentando fazer esta rotina para ordenar um vetor que armazena instancias de uma classe, mais ou menos no esquema que vc apresentou do cliente.

Só que, na hora de definir os métodos compare, dentro da classe e dentro do ComparadorClientePorNome, ele está exigindo que eu coloque os atributos como object.

O que eu tenho que fazer para deixá-los como o tipo da minha classe? Seria o <> depois do implements. Aqui naum deu certo.

Aguardo seu retorno.

desde já agradeço

[quote=eniosb]Seria o <> depois do implements? Aqui naum deu certo.
[/quote]
Seria isso mesmo. Provavelmente aí não deu certo usar o <> (Se chama generics isso) porque o seu java deve ser o 1.4. O uso de generics só está disponível a partir do java 1.5. Atualize seu java e tente novamente

O meu java estava na versão 1.4 mesmo, só que eu atualizei para a 1.5 e continua dando o mesmo problema. Segue o código da classe do comparator pra vc dar uma olhada se tem algo de errado:

package br.empresa.projeto.comuns;

import br.empresa.projeto.vo.Comarca;

import java.util.Comparator;

public class ComparadorComarcaPorDescricao implements Comparator<Comarca> {

	public int compare(Comarca com1, Comarca com2) {
	    	return com1.getDescricao().compareTo(com2.getDescricao());
	}
    
}

Teoricamente certo? Mas aqui ele não reconhece o generics.
O que eu posso fazer?

Você está utilizando qual IDE?

Estou usando Eclipse 3.0.1!

Atualize seu Eclipse para 3.1 ou superior (preferível usar o 3.2 “Callisto”) para poder usar com Java 5.0.

Valeu pela Aula…muito boa mesmo…parabens