package OrdenacaoListas;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import Contas.Cliente;
import Contas.Conta;
import Contas.ContaCorrente;
import Contas.ContaPoupanca;
/**
*
*
* ORDEM NATURAL
* É a ordem definida pelo próprio elemento da lista.
*
* No nosso exemplo a classe Conta define o seu próprio critério
* de ordenação implementando a interface java.lang.Comparable.
* Nesse caso não é utilizado nenhum Comparator.
* @author jejec
*
*/
public class OrdemNaturalLegado {
public static void main(String[] args) {
Conta cc1 = new ContaCorrente(new Cliente("333444555-00"), 33);
cc1.getTitular().setNome("Nico");
cc1.deposita(333.0);
Conta cc2 = new ContaPoupanca(new Cliente("213432670-55"), 44, 12);
cc2.getTitular().setNome("Guilherme");
cc2.deposita(444.0);
Conta cc3 = new ContaCorrente(new Cliente("234567890-11"), 11);
cc3.getTitular().setNome("Paulo");
cc3.deposita(111.0);
Conta cc4 = new ContaPoupanca(new Cliente("553667119-43"), 22, 12);
cc4.getTitular().setNome("Ana");
cc4.deposita(222.0);
List<Conta> lista = new ArrayList<>();
lista.add(cc1);
lista.add(cc2);
lista.add(cc3);
lista.add(cc4);
for (Conta conta : lista) {
System.out.println(conta + " Nome: " + conta.getTitular().getNome());
}
System.out.println("--------------");
Collections.sort(lista);//ESSA LINHA NÃO COMPILA
//
for (Conta conta : lista) {
System.out.println(conta + " Nome: " + conta.getTitular().getNome());
}
}
}
A classe Conta:
package OrdenacaoListas;
public abstract class Conta implements Comparable<Conta>{
//atributos
private double saldo;
private int agencia;
private int numero;
private Cliente titular;
private static int contasCriadas = 0;
//construtor
public Conta(Cliente titular, int agencia) {
contasCriadas++;
this.titular = titular;
this.agencia = agencia;
//System.out.println("Criou-se uma conta.");
}
//getters e setters
public static int getContasCriadas() {
return Conta.contasCriadas;
}
public int getAgencia() {
return agencia;
}
public void setAgencia(int agencia) {
this.agencia = agencia;
}
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public Cliente getTitular() {
return titular;
}
public double getSaldo() {
return saldo;
}
//metodos
public void deposita(double valor){
this.saldo += valor;
}
public void saca(double valor) throws MyExceptionConta{
if(this.saldo < valor) {
throw new MyExceptionConta("Hellow Exception.");
}
this.saldo -= valor;
}
public void transfere(double valor, Conta destino) throws MyExceptionConta{
this.saca(valor);
destino.deposita(valor);
System.out.println(
"Transferencia realizada com sucesso de " + this.titular
+ " para " + destino.titular);
}
@Override
public boolean equals(Object obj) {
Conta c = (Conta) obj;
if(this.agencia == c.agencia && this.titular.equals(c.titular)) {
return true;
}
return false;
}
@Override
public String toString() {
// return "_CPF do titular: " + this.getTitular().getCpf() +
// " _Agencia: " + this.agencia;
return this.titular + " _Agencia: " + this.agencia;
}
}
O compareTo está implementado em ContaCorrente e ContaPoupanca, dessa forma:
@Override
public int compareTo(Conta outra) {
return Double.compare(this.getSaldo(), outra.getSaldo());
}
A Exception que aparece é:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method sort(List<T>) in the type Collections is not applicable for the arguments (List<Conta>)
at OrdenacaoListas.OrdemNaturalLegado.main(OrdemNaturalLegado.java:54)