Programación

1º DAM/DAW - Curso 2024-2025

User Tools

Site Tools


apuntes:lambdas

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:lambdas [2023/05/28 11:53] – [Interfaces funcionales] Santiago Faciapuntes:lambdas [2023/05/28 12:04] (current) – [Referencias a métodos] Santiago Faci
Line 3: Line 3:
 ==== Interfaces funcionales ==== ==== Interfaces funcionales ====
  
-  * //Predicate: Evalua una condición booleana+  * Las interfaces funcionales son interfaces que poseen un único método abstracto (sin implementar) 
 +  * Aparecen por primera vez en Java 8 
 +  * Están especialmente preparadas para usarse con expresiones lambda 
 +  * Pueden tener definidos métodos por defecto (tienen implementación) 
 + 
 +En Java existen una serie de interfaces funcionales ya definidas especialmente útiles 
 + 
 + 
 +  * **Predicate**: Evalua una condición booleana
     * //IntPredicate//, //LongPredicate//, //DoublePredicate//     * //IntPredicate//, //LongPredicate//, //DoublePredicate//
-  * //Consumer: Acepta un input como entrada y no devuelve ningún resultado+  * **Consumer**: Acepta un input como entrada y no devuelve ningún resultado
     * //IntConsumer//, //LongConsumer//, //DoubleConsumer//     * //IntConsumer//, //LongConsumer//, //DoubleConsumer//
-  * //Function: Acepta un input como entrada y devuelve un resultado+  * **Function**: Acepta un input como entrada y devuelve un resultado
     * //IntFunction//, //IntToDoubleFunction//, //IntToLongFunction//, //LongFunction//, LongToDoubleFunction, . . .     * //IntFunction//, //IntToDoubleFunction//, //IntToLongFunction//, //LongFunction//, LongToDoubleFunction, . . .
-  * //Supplier//: No acepta argumentos y devuelve un resultado (al contrario que //Consumer//)+  * **Supplier**: No acepta argumentos y devuelve un resultado (al contrario que //Consumer//)
     * //BooleanSupplier//, //IntSupplier//, //LongSupplier//, //DoubleSupplier//     * //BooleanSupplier//, //IntSupplier//, //LongSupplier//, //DoubleSupplier//
-  * //BiPredicate: Versión de //Predicat//e para dos argumentos +  * **BiPredicate**: Versión de //Predicat//e para dos argumentos 
-  * //BiFunction: Versión de //Function// para dos argumentos+  * **BiFunction**: Versión de //Function// para dos argumentos 
 + 
 +<code java> 
 +Predicate<String> checkEmpty = (value) -> value.isEmpty(); 
 +System.out.println(checkEmpty.test("hola"));  
 +System.out.println(checkEmpty.test("")); 
 +</code> 
 + 
 +Pero también podemos crear las nuestras propias: 
 + 
 +<code java> 
 +@FunctionalInterface 
 +public interface SayMyName { 
 +  void say(String name);  
 +
 +</code> 
 + 
 + 
 + 
 + 
 ==== Expresiones lambda ==== ==== Expresiones lambda ====
 +
 +  * Aparecen por primera vez en Java 8
 +  * Código más compacto y limpio
 +  * Sustituyen al concepto de clase anónima
 +  * Permiten expresar las instancias de interfaces funcionales de una forma compacta
 +  * Su uso está especialmente extendido en el uso de Streams, donde se pueden utilizar de forma que el código queda mucho más compacto y fácil de entender
 +  * Cuando usamos una tenemos que imaginarnos que estamos implementando el código necesario para ejecutar luego el método que tiene por defecto asignada esa interface
 +
 +La sintaxis es:
 +<code java>
 +(parametros) -> (cuerpo-lambda)
 +</code>
 +
 +Por ejemplo:
 +
 +<code java>
 +// Para ordenar una lista
 +listaAnimales.sort((animal1, animal2) -> (animal1.getPeso() – animal2.getPeso());
 +
 +// Para crear un Predicate que permita evaluar una colección sobre un objeto
 +Animal unAnimal = new Animal(. . . .)
 +
 +Predicate<Animal> pesoMayorQue10 = (animal) -> animal.getPeso() > 10; 
 +pesoMayorQue10.test(unAnimal); // true/false
 +</code>
  
 ==== Referencias a métodos ==== ==== Referencias a métodos ====
Line 52: Line 105:
 ---- ----
  
-(c) 2023 Santiago Faci+(c) 2019-{{date>%Y}} Santiago Faci
apuntes/lambdas.1685274837.txt.gz · Last modified: 2023/05/28 11:53 by Santiago Faci