Registro de Transações Bancárias com Stream API
Dominando Desafios de Códigos Intermediários em Java - 2/5
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.
Entrada | Saída |
---|---|
100 | |
2 | |
d | Saldo : 90.0 |
10 | Transacoes: |
s | d de 10.0 |
20 | s de 20.0 |
Entrada | Saída |
---|---|
5000 | |
1 | Saldo : 5500.0 |
d | Transacoes: |
500 | d 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.