Sesion10 ProgramaciónFuncional
Sesion10 ProgramaciónFuncional
Sesion10 ProgramaciónFuncional
Java Clases
FP Funciones
Imperativo, comportamiento
Java Clases
como una serie de pasos
Imperativo,
Estado
OOP + yPatrones
comportamiento
comportamiento
para abs-
Java Clases
juntos,
como una
promueve
serie
tracciones de demutabilidad
pasos
alto nivel
Declarativo,
Es una abstracción
Evita interacción
endealto
estado, pro- fun-
FP Funciones
ciones nivel
sin especificar
mueve por si mismo
su contenido
inmutabilidad
Imperativo,
OOP comportamiento
+ Patrones para abs-
Java Clases
como una serie
tracciones de de
altopasos
nivel
Declarativo,
Es una abstracción
interacción
endealto
fun-
FP Funciones
ciones nivel
sin especificar
por si mismo
su contenido
Imperativo,
Concurrencia
OOP comportamiento
+ Patronesbasica
paracon
abs-
Java Clases
locks
como yuna
recursos
serie
tracciones de compartidos
de
altopasos
nivel
Workflows
Declarativo, paralelosensin
Es una abstracción
interacción es-
dealto
fun-
FP tadonivel Funciones
compartido (no locks!)
ciones sin especificar
por si mismo
su contenido
Imperativo,
Concurrencia
OOP comportamiento
+ Patronesbasica
paracon
abs-
Java Descriptivo (demasiado)
Clases
locks
como yuna
recursos
serie
tracciones de compartidos
de
altopasos
nivel
Workflows
Declarativo, paralelosensin
Es una abstracción
interacción es-
dealto
fun-
FP Conciso y denso
Funciones
tadonivel
ciones compartido
sin especificar(no
por si mismo locks!)
su contenido
Ejemplo Funcional
18
• Class::method (i->)
Es una función anónima, básicamente es un método abstracto es
• object::method (i->)
decir un método que sólo está definido en una interfaz pero no
implementado, y esa es la clave de la funciones lambda, al no estar
body • expression (return)
implementado, el programador lo puede implementar dónde el • {exp; return exp;}
crea conveniente sin haber heredado de la interfaz
19
Function<T,R> apply(T):R
• item -> item +1
Predicate<T> test(T):boolean
• item -> item > 0
Supplier<T> get(): T
• ()-> "..."
BiConsumer<T,U,R> apply(T,U):R
• (msg1, msg2) -> System.out.println(msg1 + "," + msg2)
BiFunction<T,U,R> accept(T,U):R
• (x, y) -> x + y
BiPredicate<T,U,R> apply(T,U):R
• String::equals
...
Expresiones Lambda (1)
• Expresiones Lambda
⚫ Compuesta por dos elementos, separados por una flecha→
● Izquierda flecha parámetros
⚫ Es un función anónima
• Ejemplo
Expresiones Lambda (2)
● Ejemplo:
● 1 parámetro (n)
Expresiones Lambda (3)
⚫ Ejemplo:
● Procesa n > 10
- Operación a realizar
- Se ejecutara tantas veces como elementos hay.
Streams
Java
Collection & Stream Stream
in .parallel()
• Gestión bucle
• Método de Función de
Collection transformación transformacion
• Paralelismo
[a, b, c…]
• ¿Reutilización
del código?
Stream
out
Streams
Streams
⚫ Un conjunto de funciones que se ejecutan de forma anidada
⚫ Ejemplo:
Streams
• Funcionamiento
⚫ Flujo de funciones, donde el resultado de una es la entrada de la siguiente.
list.stream();
IntStream.range();
Stream.of("1", "2"...);
Stream.generate();
Stream.iterate();
.collect(Collectors.toList())
.toArray(Integer::new)
[a, b, c]
Streams: Operaciones de Transmisión
• Operaciones Intermedias con Streams:
• filter()
• map()
• flatMap()
• distinct()
• sorted()
• peek()
• limit()
• skip()
Java
Stream. Filtrado
.filter(Predicate) .distinct()
.skip(long)
.peek() //debugging
.limit(long)
Java 23
Stream. Transformación
.map(Function) .mapFlat(Function)
.sorted(Comparator);
.mapToInt(…);
Streams: Operaciones de Transmisión
• Operaciones Terminales con Streams:
• forEach()
• forEachOrdered()
• toArray()
• reduce()
• collect()
• min()
• max()
• count()
• anyMatch()
• allMatch()
• noneMatch()
• findFirst()
• findAny()
.findFirst(Predicate)
.reduce(Double::sum) .anyMatch(Predicate)
.reduce(Double::max) .noneMatch(Predicate)
.reduce(Double::min) .allMatch(Predicate)
.reduce(ini,BiFun)
.forEach():void
item
Ejemplo: Streams
• numeros.stream()
⚫ Genera el stream de la lista
• filter( n → n > 10 )
⚫ Filtra dejando solo elementos mayores que 10
• count()
⚫ Filtra dejando un entero con el número de
elementos