Métodos personalizados - Juntando tudo

Entrada/Saída e Streams em Java

Alex Liu

Software Development Engineer

Integrando conceitos

  • Combine e use:
    • Enums
    • Data e hora
    • Recursão
  • Objetivo: criar métodos claros, reutilizáveis e fáceis de manter

  • Programa de exemplo:

    • Um site de e-commerce
      • com sistema prático OrderStatus e métodos de rastreamento
      • com algoritmo de desconto por fidelidade.
Entrada/Saída e Streams em Java

Definindo Enum com métodos

  • Defina o Enum OrderStatus para representar os estados do pedido
enum OrderStatus {
    PLACED("Order placed successfully"),
    DELIVERED("Order delivered");

private final String message; OrderStatus(String message) { this.message = message; } public String getMessage() { return message; } }
Entrada/Saída e Streams em Java

Método personalizado para operações com data

  • Use orderDate para estimar quando o pedido será entregue ao cliente
    • O método .plusDays() adiciona dias a uma data
import java.time.LocalDate;

public class OrderUtils {
    public static LocalDate estimateDelivery(LocalDate orderDate, 
                                            int daysToDeliver) {
        return orderDate.plusDays(daysToDeliver);
    }
}
Entrada/Saída e Streams em Java

Método recursivo para desconto

  • Política de recompensas: descontos crescentes mês a mês para clientes que retornam
    • Use um método recursivo para calcular o desconto acumulado:
public class DiscountCalculator {
    public static double cumulativeDiscount(int months) {
        if (months <= 0) return 0;
        return 5 + cumulativeDiscount(months - 1); // $5 de desconto por mês
    }
}
Entrada/Saída e Streams em Java

Objeto personalizado

  • Crie uma classe Order que contenha todas as informações do pedido
    • Inclui dados importantes como id, data e status atual.
class Order {
    int orderId;
    OrderStatus orderStatus;
    LocalDate orderDate;

    Order(int orderId, LocalDate orderDate) {
        this.orderId = orderId;
        this.orderDate = orderDate;
        this.orderStatus = orderStatus;
    }
Entrada/Saída e Streams em Java

Objeto com método toString()

  • Queremos imprimir o pedido de um jeito fácil de ler e processar pelo funcionário
    • Defina o método toString() para controlar como o objeto Order será impresso.
public String toString() {
        return "Order[id=" + orderId + ", date=" + orderDate + "]";
    }
}
  • Saída ao chamar .toString():
    Order[id=10015, date=2025-03-19]
    
Entrada/Saída e Streams em Java

Método main

public class Main {
    public static void main(String[] args) {
        Order order = new Order(101, LocalDate.now());
        System.out.println(order.toString());

LocalDate delivery = OrderUtils.estimateDelivery(order.orderDate, 7); System.out.println("Estimated Delivery: " + delivery); System.out.println(OrderStatus.PLACED);
double discount = DiscountCalculator.cumulativeDiscount(3); System.out.println("Total Discount: $" + discount); } }
Entrada/Saída e Streams em Java

Método main - saída

  • Este método main é executado quando um novo pedido é criado com as informações:
    • O usuário já assinou por 3 meses
    • O prazo estimado de entrega é 7 dias
    • O status inicial do pedido será PLACED
Order[id=101, date=2025-03-09]
Estimated Delivery: 2025-03-16
Order placed successfully
Total Discount: $15.0
Entrada/Saída e Streams em Java

Vamos praticar!

Entrada/Saída e Streams em Java

Preparing Video For Download...