Implementei a ordenação da lista de uma outra forma e gostaria saber se também é correto utilizar dessa forma, ou se é preferível fazer conforme foi passado no curso:
//Ordenando itens da lista
venda.getProdutos().sort((p1, p2) -> Double.compare(p1.getValor(), p2.getValor()));
Classe Conta
public class Conta {
private double limite;
private double saldo;
public Conta(double limite) {
this.limite = limite;
this.saldo = limite;
}
public double getLimite() {
return limite;
}
public double getSaldo() {
return saldo;
}
public void realizaCompra(double vl){
this.saldo -= vl;
}
@Override
public String toString() {
return "Saldo disponível: " + getSaldo();
}
}
Classe Produto
public class Produto {
private String descricao;
private double valor;
public String getDescricao() {
return descricao;
}
public Produto(String descricao, double valor) {
this.descricao = descricao;
this.valor = valor;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
@Override
public String toString() {
return "Produto: " + getDescricao() + " Valor R$-" + getValor();
}
}
Classe Venda
public class Venda {
private Conta conta;
private List<Produto> produtos = new ArrayList<>();
public Venda(Conta conta) {
this.conta = conta;
}
public Conta getConta() {
return conta;
}
public List<Produto> getProdutos() {
return produtos;
}
public boolean addProdutos(Produto produto) {
if(conta.getLimite() > produto.getValor()){
this.produtos.add(produto);
this.conta.realizaCompra(produto.getValor());
return true;
}else {
return false;
}
}
}
Classe Principal
public class Principal {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Informe o limite do cartão: ");
double limite = sc.nextDouble();
Conta conta = new Conta(limite);
Venda venda = new Venda(conta);
int sair = 1;
while (sair != 0){
System.out.println("Informe a descricao do produto: ");
String descricao = sc.next();
System.out.println("Informe o valor do produto: ");
double valor = sc.nextDouble();
Produto produtos = new Produto(descricao, valor);
if(conta.getSaldo() >= valor){
venda.addProdutos(produtos);
}else {
System.out.println("Saldo insuficiente para realizar a compra!");
break;
}
System.out.println("Digite 0 para sair ou 1 para incluir outro produto!");
sair = sc.nextInt();
}
//Ordenando itens da lista
venda.getProdutos().sort((p1, p2) -> Double.compare(p1.getValor(), p2.getValor()));
System.out.println(conta.toString());
System.out.println("Itens comprados: ");
for (Produto prod: venda.getProdutos()) {
System.out.println("Item: " + prod.getDescricao() + " Valor R$" + prod.getValor());
}
}
}