Collections

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).

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.

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

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.

hummm okay, vlw msm!

[quote=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).[/quote]

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?

[quote=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?[/quote]

Tem razão, eh redundante msm.