Super JAVA

NIVEL BÁSICO

Introducción a la Programación Funcional

  • ¿Qué es la programación funcional?
  • Beneficios del paradigma funcional
  • Historia y evolución en Java

Coleciones

  • mutable vs inmutable
  • homogeneo vs heterogeneo
  • ArrayList: Una implementación de la interfaz Lista basada en una matriz redimensionable. Algunos métodos incluyen add(), get(), size(), remove() y contains().
  • LinkedList: Una implementación de las interfaces Lista y Deque basada en una lista doblemente enlazada. Algunos métodos incluyen add(), get(), size(), remove() y contains().
  • HashMap: Una implementación de la interfaz Mapa que utiliza una tabla hash. Algunos métodos incluyen put(), get(), size(), remove() y containsKey().
  • HashSet: Una implementación de la interfaz Conjunto que utiliza una tabla hash. Algunos métodos incluyen add(), size(), remove() y contains().

formas de iterar en Java

  • bucle for (no hay un simil en python)
for (int i = 0; i < coleccion.size(); i++) {
    Tipo elemento = coleccion.get(i);
    // bloque de código a ejecutar
}
  • bucle while
while (condicion) {
    // bloque de código a ejecutar
}
  • Bucle For-Each (similar al bucle for in en python)
for (Tipo variable : coleccion) {
    // bloque de código a ejecutar
}
  • Iterador: Es un objeto que se puede utilizar para recorrer colecciones, incluyendo Listas, Conjuntos y Mapas.
Iterator<Tipo> iterador = coleccion.iterator();
while (iterador.hasNext()) {
    Tipo elemento = iterador.next();
    // bloque de código a ejecutar
}

Fundamentos Funcionales en JAVA

  • Inmutabilidad
  • Funciones puras
  • First-class functions
  • Lambda expressions básicas
  • Interfaces funcionales
  • Method references

Interfaces Funcionales Básicas

  • Function<T,R>
  • Consumer
  • Supplier
  • Predicate

NIVEL INTERMEDIO

Streams API

  • Creación de streams
  • Operaciones intermedias (map, filter, sorted)
  • Operaciones terminales (collect, reduce)
  • Parallel streams

Optional para Manejo Null

  • Creación y uso de Optional
  • Métodos map, flatMap, filter
  • Patrones de uso seguros

Composición de Funciones

  • Encadenamiento de funciones
  • Currying en Java
  • Partial application
  • Function composition (andThen, compose)

Programacion Reactiva

  • Conceptos Fundamentales:
    • Asincronía: Operaciones no bloqueantes
    • vent-driven: Basado en eventos y cambios
    • Data streams: Flujos continuos de datos
    • Backpressure: Control de flujo de datos
  • Componentes Principales:

    • Publisher/Observable: Fuente que emite datos
    • Subscriber/Observer: Consumidor de datos
    • Subscription: Contrato entre Publisher y Subscriber
    • Processor: Componente que transforma datos
  • Casos de Uso:

    • Aplicaciones web reactivas
    • Procesamiento de streams de datos
    • IoT y datos en tiempo real
    • Microservicios reactivos
  • Ventajas:

    • Mejor utilización de recursos
    • Mayor capacidad de respuesta
    • Manejo natural de operaciones asíncronas
    • Escalabilidad mejorada
  • Patrones Comunes:

    • Hot vs Cold Publishers
    • Combinación de streams
    • Manejo de backpressure
    • Error handling y recovery
    • Testing reactivo
  • Consideraciones de Diseño:

    • Pensar en streams de datos
    • Evitar bloqueos
    • Manejar errores de forma resiliente
    • Considerar el backpressure
  • La programación reactiva es especialmente útil cuando:

    • Necesitas manejar grandes volúmenes de datos
    • Requieres baja latencia
    • Trabajas con eventos en tiempo real
    • Necesitas escalabilidad y eficiencia en recursos