apuntes:lambdas
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
apuntes:lambdas [2023/05/28 11:53] – [Interfaces funcionales] Santiago Faci | apuntes: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 | ||
* // | * // | ||
- | * //Consumer: Acepta un input como entrada y no devuelve ningún resultado | + | * **Consumer**: Acepta un input como entrada y no devuelve ningún resultado |
* // | * // | ||
- | * //Function: Acepta un input como entrada y devuelve un resultado | + | * **Function**: Acepta un input como entrada y devuelve un resultado |
* // | * // | ||
- | * //Supplier//: No acepta argumentos y devuelve un resultado (al contrario que // | + | * **Supplier**: No acepta argumentos y devuelve un resultado (al contrario que // |
* // | * // | ||
- | * //BiPredicate: | + | * **BiPredicate**: Versión de // |
- | * //BiFunction: Versión de // | + | * **BiFunction**: Versión de // |
+ | |||
+ | <code java> | ||
+ | Predicate< | ||
+ | System.out.println(checkEmpty.test(" | ||
+ | System.out.println(checkEmpty.test("" | ||
+ | </ | ||
+ | |||
+ | Pero también podemos crear las nuestras propias: | ||
+ | |||
+ | <code java> | ||
+ | @FunctionalInterface | ||
+ | public interface SayMyName { | ||
+ | void say(String name); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
==== 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) | ||
+ | </ | ||
+ | |||
+ | Por ejemplo: | ||
+ | |||
+ | <code java> | ||
+ | // Para ordenar una lista | ||
+ | listaAnimales.sort((animal1, | ||
+ | |||
+ | // Para crear un Predicate que permita evaluar una colección sobre un objeto | ||
+ | Animal unAnimal = new Animal(. . . .) | ||
+ | |||
+ | Predicate< | ||
+ | pesoMayorQue10.test(unAnimal); | ||
+ | </ | ||
==== Referencias a métodos ==== | ==== Referencias a métodos ==== | ||
Line 52: | Line 105: | ||
---- | ---- | ||
- | (c) 2023 Santiago Faci | + | (c) 2019-{{date> |
apuntes/lambdas.1685274837.txt.gz · Last modified: 2023/05/28 11:53 by Santiago Faci