Collections

6 respostas
erickles

Pessoal me deem uma forcinha ae

for(int y = 0; y < lista.size(); y++) {
			Conta cc = lista.get(y);
		System.out.println(cc.getNome() + " " + cc.getSaldo());
		Collections.sort(lista);
		System.out.println(cc.getNome() + " " + cc.getSaldo());
	}

Quero dar um sort nessa lista para imprimir em ordem alfabetica o nome dos clientes do banco, mas dah um erro no eclipse. Parametrizei a classe para gerar lists para trabalhar com a classe Conta(mãe).

6 Respostas

ViniGodoy

A classe Conta implementa a interface Comparable? Se não implementa, tem que implementar.

public class Conta implements Comparable<Conta> {
//Código da classe

   public int compareTo(Conta outraConta) {
       return Collator.getInstance().compareTo(getNome(), outraConta.getNome());
    }
}

Só sendo um comparable você pode usar o Collections.sort da forma que você fez.

erickles

Sim, no caso, usaria o sort pra ordena os nomes dos clientes em ordem alfabetica, no modo que voce fez daria certo?

ViniGodoy

Creio que daria certo sim.

Outra altenativa é implementar um Comparator.

public class ComparadorDeContaPorNome implements

public class ComparadorDeContaPorNome implements Comparator<Conta> { public int compare(Conta c1, Conta c2) { return Collator.getInstance().compareTo(c1.getNome(), c2.getNome()); } }
Daí na hora do sort você faz:
Collections.sort(lista, new ComparadorDeContaPorNome());

Use a interface Comparable quando você quer dizer que sua classe tem uma ordem natural, e portanto, pode ser ordenada seguindo essa ordem. Por exemplo, a classe Integer é um comparable, pois a ordem natural dela é a dos números de maneira crescente.

Use a interface Comparator para definir um comparador externo. Se você quiser ordenar a conta pelo valor, ou um Integer em ordem decrescente, nesse caso, você faz um comparador com a nova ordem.

erickles

hummm okay, vlw msm!

s4nchez

erickles:
Pessoal me deem uma forcinha ae

for(int y = 0; y < lista.size(); y++) {
			Conta cc = lista.get(y);
		System.out.println(cc.getNome() + " " + cc.getSaldo());
		Collections.sort(lista);
		System.out.println(cc.getNome() + " " + cc.getSaldo());
	}

Quero dar um sort nessa lista para imprimir em ordem alfabetica o nome dos clientes do banco, mas dah um erro no eclipse. Parametrizei a classe para gerar lists para trabalhar com a classe Conta(mãe).

Mesmo fazendo o uso correto do Collections esse código tá estranho. Por que você precisa do “sort()” dentro do for? Não seria mais interessante ordenar a lista apenas uma vez?

erickles

s4nchez:

Mesmo fazendo o uso correto do Collections esse código tá estranho. Por que você precisa do “sort()” dentro do for? Não seria mais interessante ordenar a lista apenas uma vez?

Tem razão, eh redundante msm.

Criado 8 de fevereiro de 2007
Ultima resposta 9 de fev. de 2007
Respostas 6
Participantes 3