Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Carrinho de compras

Carrinhos de compras

public class Carrinho {
    List<Produto> listaDeProduto = new ArrayList<>();

    @Override
    public String toString() {
        return "Carrinho{" +
                "listaDeProduto=" + listaDeProduto.stream().map(Produto::getName).collect(Collectors.joining(",")) +
                '}'+
                "Preço total : " + precoCarrinho();
    }

    public double precoCarrinho(){

        return listaDeProduto.stream()
                .mapToDouble(Produto::getPrice)
                .sum();
    }

    public void removerProduto(String productName){
        try{
            this.listaDeProduto.removeIf(p -> p.getName().equals(productName));
        }catch (NullPointerException e){
            System.out.println("Produto não encontrado no carrinho");
        }
    }

    public void adicionarProduto(Produto produto){
        this.listaDeProduto.add(produto);
    }

Produto :

public record Produto(String name, double price) {
}

Main :

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        Carrinho carrinho = new Carrinho();

        boolean buy = true;
        while(buy){
            System.out.println("Enter the product name : ");
            String productName = scanner.nextLine();
            System.out.println("Enter the product price : ");
            double productPrice = scanner.nextDouble();
            scanner.nextLine();
            carrinho.adicionarProduto(new Produto(productName,productPrice));
            System.out.println("Want to add something more ?");
            String answer = scanner.nextLine();
            if(answer.equals("no")){
                buy=false;
                break;
            }
        }
        System.out.println(carrinho);

    }
2 respostas
solução!

Oi, Igor! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Chamou atenção o uso de stream para calcular o preço total e montar a representação do carrinho com toString(). Isso mostra uma boa organização das classes e um uso claro de métodos para separar responsabilidades.

Uma dica interessante para o futuro é usar Optional para lidar com buscas de produtos, evitando exceções desnecessárias. Veja este exemplo:


Optional produtoEncontrado = listaDeProduto.stream()
    .filter(p -> p.getName().equals(nome))
    .findFirst();

produtoEncontrado.ifPresent(p -> listaDeProduto.remove(p));

Esse código procura um produto pelo nome e remove apenas se ele existir, deixando o fluxo mais seguro e legível.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Nossa, interessante e muito útil. Muito obrigado