Métodos personalizados: todo junto

Entrada/Salida y Streams en Java

Alex Liu

Software Development Engineer

Integrar conceptos

  • Combina y usa:
    • Enums
    • Fecha y hora
    • Recursividad
  • Objetivo: crear métodos claros, reutilizables y fáciles de mantener

  • Programa de ejemplo:

    • Un sitio de e-commerce
      • con un sistema OrderStatus práctico y métodos para seguimiento de pedidos
      • con un algoritmo de descuento por fidelidad.
Entrada/Salida y Streams en Java

Definir Enum con métodos

  • Define OrderStatus Enum para representar los estados del 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/Salida y Streams en Java

Método personalizado para operaciones con fechas

  • Usa orderDate para estimar cuándo se entregará el pedido al cliente
    • El método .plusDays() añade días a una fecha dada
import java.time.LocalDate;

public class OrderUtils {
    public static LocalDate estimateDelivery(LocalDate orderDate, 
                                            int daysToDeliver) {
        return orderDate.plusDays(daysToDeliver);
    }
}
Entrada/Salida y Streams en Java

Método recursivo para el descuento

  • Política de recompensas: descuentos que aumentan mes a mes para premiar a quienes repiten compra
    • Usa un método recursivo para calcular el descuento acumulado:
public class DiscountCalculator {
    public static double cumulativeDiscount(int months) {
        if (months <= 0) return 0;
        return 5 + cumulativeDiscount(months - 1); // $5 discount per month
    }
}
Entrada/Salida y Streams en Java

Objeto personalizado

  • Crea una clase Order que contenga toda la información del pedido
    • Incluye datos clave como id, date y current status.
class Order {
    int orderId;
    OrderStatus orderStatus;
    LocalDate orderDate;

    Order(int orderId, LocalDate orderDate) {
        this.orderId = orderId;
        this.orderDate = orderDate;
        this.orderStatus = orderStatus;
    }
Entrada/Salida y Streams en Java

Objeto con método toString()

  • Queremos imprimir el pedido de forma fácil de leer y procesar para quien lo gestione
    • Define el método toString() para decidir cómo se imprime el objeto Order.
public String toString() {
        return "Order[id=" + orderId + ", date=" + orderDate + "]";
    }
}
  • Salida de ejemplo al llamar a .toString():
    Order[id=10015, date=2025-03-19]
    
Entrada/Salida y Streams en 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/Salida y Streams en Java

Método main: salida

  • Este método main se ejecuta cuando se realiza un nuevo pedido con la siguiente información:
    • El usuario ya lleva 3 meses suscrito
    • El tiempo estimado de entrega es de 7 días
    • El estado inicial del pedido será PLACED
Order[id=101, date=2025-03-09]
Estimated Delivery: 2025-03-16
Order placed successfully
Total Discount: $15.0
Entrada/Salida y Streams en Java

¡Vamos a practicar!

Entrada/Salida y Streams en Java

Preparing Video For Download...