Pular para o conteúdo
Bruno Dórea
Todos os posts

5 mins de leitura


Registro de Transações Bancárias com Stream API

Dominando Desafios de Códigos Intermediários em Java - 2/5


Desenvolvimento Java com IA
Desenvolvimento Java com IA

Descrição

Você está aprimorando o programa anterior e agora deseja utilizar a Stream API do Java para processar as transações bancárias de forma mais eficiente.

Entrada

O programa solicitará ao usuário que informe o saldo inicial da conta.

Em seguida, o programa solicitará a quantidade total de transações que o cliente deseja realizar.

Entrada de Transações: Para cada transação, o programa solicitará ao usuário:

  • O tipo de transação: Digite 'D' para depósito ou 'S' para saque.
  • O valor da transação.

Saída

Utilizando a Stream API, o programa armazenará cada transação, que incluirá um tipo (Depósito ou Saque) e um valor.

Ao final das transações, o programa exibirá o saldo final da conta e a lista de transações.

Exemplos

A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis.

EntradaSaída
100
2
dSaldo : 90.0
10Transacoes:
sd de 10.0
20s de 20.0
EntradaSaída
5000
1Saldo : 5500.0
dTransacoes:
500d de 500.0

Resolução

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
 
public class RegistroTransacoesComStream {
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double saldo = scanner.nextDouble();
        int quantidadeTransacoes = scanner.nextInt();
        List<Transacao> transacoes = new ArrayList<>();
 
        for (int i = 1; i <= quantidadeTransacoes; i++) {
            char tipoTransacao = scanner.next().charAt(0);
            double valorTransacao = scanner.nextDouble();
 
            Transacao transacao = new Transacao(tipoTransacao, valorTransacao);
            transacoes.add(transacao);
 
            if (Character.toUpperCase(transacao.getTipo()) == 'D') {
                saldo += transacao.getValor();
            } else if (Character.toUpperCase(transacao.getTipo()) == 'S') {
                saldo -= transacao.getValor();
            }
        }
 
        System.out.println("Saldo : " + saldo);
        System.out.println("Transacoes:");
        transacoes.stream()
                .map(transacao -> (Character.toUpperCase(transacao.getTipo()) == 'D' ? "d de " : "s de ") + transacao.getValor())
                .collect(Collectors.toList())
                .forEach(System.out::println);
 
        scanner.close();
    }
}
 
class Transacao {
    private char tipo;
    private double valor;
 
    public Transacao(char tipo, double valor) {
        this.tipo = tipo;
        this.valor = valor;
    }
 
    public char getTipo() {
        return tipo;
    }
 
    public double getValor() {
        return valor;
    }
}

Para encontrar outras soluções, verifique aqui.

Caso encontre algum erro ou tenha sugestões, clique aqui e abra uma issue no Github.