Descargar la presentación
La descarga está en progreso. Por favor, espere
1
JDK 8 ExpresionesLambda
2
Objetivo: Aprender a utilizar las expresiones lambda y los flujos de Java 8
3
Expresiones lambda ¿Porqué Java requiere las expresiones lambda?
Sintaxis de las expresiones lambda Interfaces funcionales y su definición Package java.util.function Refrencia a métodos y constructores Referenciaa variables externas Métodos útiles en el JDK 8 que pueden utilizar lambdas
4
Concurrencia en JAVA
5
Problema: Iteración externa
Nuestro código controla la iteración Inherentemente es serial: itera del inicio al fin No es thread-safe
6
Iteración interna con INNER CLASSES
La iteraciónón es controlada por la biblioteca No es inherentemente serial – transversal se podría realizar en paralelo Se podría hacer transversal de forma perezosa (lazily) Thread safe Barrera: Sintacticamente horrible
7
Iteración interna con expresiones lambda
más legible más abstracta menos propensa a errores Nota: se requiere más trabajo para que este código compile!
8
Conclusión Necesidad de hacer cambios a Java para simplificar la codificación que pueda ser paralelizada Las expresiones lambda simplifican el paso de comportamiento utilizando parámetros
9
Sintaxis
10
Expresiones lambda SON Funciones Anónimas
Función anónima: son semejantes a los métodos pero sin clase (parámetros) -> { cuerpo-lambda} El cuerpo de la expresión lambda puede generar excepciones Las lambdas de una única línea No necesitan llaves no requieren una instrucción de retorno explicita las lambdas con un único parámetro no requieren paréntesis lambdas sin parámetros deben tener paréntesis
11
Ejemplos: sintaxis expresiones lambda
12
Expresiones lambda: Intferencia de tipo
Definición de método static<T> T process (List <T L , Comparator<T> C) Uso del método List <String> list = getList(); process (list, (String x, String y) -> x.length() – y.length()); El compilador es astuto String r = process(list, (x, y) -> x.length() –y.length())
13
Conclusiones La sintaxis de las expresiones lambda es sencillo
Corchetes y llaves son opcionales en ciertas situaciones A menudo no es necesario indicar el tipo de la interfaz Java sigue siendo un lenguaje fuertemente tipado
14
Interfaces funcionales y su definición
15
Tipos de las expresiones lambda
Una expresión lambda es una función anónima No está asociada con una clase Java es un lenguaje fuertemente tipado ¿Cúal es el tipo de una expresión lambda? Una expresion lambda puede ser utilizada en cualquier parte en donde el tipo es una interfaz funcional La expresión lambda proporciona la implementación del método abstracto
16
Definición de interfaz funcional
Una interfaz Tiene un único método abstracto Antes de JDK 8 esto era obvio Sólo un método JDK introdujo métodos por defecto JDK 8 permite métodos estáticos en las interfaces
17
Interfaces funcionales
18
¿La siguiente función es una interfaz funcional?
Sí. Sólo tiene un método abstracto
19
¿La siguiente función es una interfaz funcional?
Sí. Sólo tiene un método abstracto
20
¿La siguiente función es una interfaz funcional?
Por lo que sí, es una interfaz funcional. Sólo tiene un método abstracto El método equals(Object) es implícito de la clase Object
21
ejemplos de uso de las expresiones lambda
22
Conclusiones Las expresiones lambda pueden ser utilizadas en cualquier parte en donde el tipo es una interfaz funcional Una interfaz funcional tiene un único método abstracto Las expresiones lambda proporcionan la implementación de un único método abstracto de la interfaz funcional
23
Interfaces funcionales en el Package java.util.function
24
The interfaces in this package are general purpose functional interfaces used by the JDK, and are available to be used by user code as well. While they do not identify a complete set of function shapes to which lambda expressions might be adapted, they provide enough to cover common requirements. Other functional interfaces provided for specific purposes, such as FileFilter, are defined in the packages where they are used. The interfaces in this package are annotated with FunctionalInterface. This annotation is not a requirement for the compiler to recognize an interface as a functional interface, but merely an aid to capture design intent and enlist the help of the compiler in identifying accidental violations of design intent. Functional interfaces often represent abstract concepts like functions, actions, or predicates. In documenting functional interfaces, or referring to variables typed as functional interfaces, it is common to refer directly to those abstract concepts, for example using "this function" instead of "the function represented by this object". When an API method is said to accept or return a functional interface in this manner, such as "applies the provided function to...", this is understood to mean a non-nullreference to an object implementing the appropriate functional interface, unless potential nullity is explicitly specified.
25
The functional interfaces in this package follow an extensible naming convention, as follows:
There are several basic function shapes, including Function (unary function from T to R), Consumer (unary function from Tto void), Predicate (unary function from T to boolean), and Supplier (nilary function to R). Function shapes have a natural arity based on how they are most commonly used. The basic shapes can be modified by an arity prefix to indicate a different arity, such as BiFunction (binary function from T and U to R). There are additional derived function shapes which extend the basic function shapes, including UnaryOperator (extends Function) and BinaryOperator (extends BiFunction). Type parameters of functional interfaces can be specialized to primitives with additional type prefixes. To specialize the return type for a type that has both generic return type and generic arguments, we prefix ToXxx, as in ToIntFunction. Otherwise, type arguments are specialized left-to-right, as in DoubleConsumer or ObjIntConsumer. (The type prefix Obj is used to indicate that we don't want to specialize this parameter, but want to move on to the next parameter, as in ObjIntConsumer.) These schemes can be combined, as in IntToDoubleFunction. If there are specialization prefixes for all arguments, the arity prefix may be left out (as in ObjIntConsumer).
26
Package java.util.pakage
Bien definido conjunto de interfaces funcionales de propósito general Todas tienen un único método abstract las expresiones lambda pueden ser utilizadas en todos los lugares en donde estos tipos son referenciados ampliamente utilizados en la biblioteca de clases de Java Especialmente en la API STREAM A continuación se describen las interfaces genéricas Hay numerosas versiones para diferentes tipos Double, Int, Long y Obj
27
Consumer(T) Operación que toma un único valor y no devuelve resultado alguno Tambien BiConsumer<T, U> acepta 2 valores y no regresa valor alguno Contienen un método para la composición de funciones andThen(Consumer after)
28
Supplier Un proveedor de resultados
Lo opuesto a un consumidor
29
function<T, R> Una función que acepta un argumento y proporciona un resultado El tipo del argumento y el del resultado pueden ser diferents Tambien la función BiFunction<T, U, R> que acepta 2 parametros y regresa un resultado métodos útiles para realizar la composición compose, and Then
30
UnaryOperator<T>
Forma Especializada de una función Un único argumento y el resultado es del mismo tipo que el valor devuelto T apply(T a)
31
BinaryOperator<T>
Forma especializada de BiFuncion Dos argumentos y un resultado, todos del mismo tipo T apply( T a, T b)
32
Predicado Toma dos argumentos
Función bivaluada booleana Toma dos argumentos Proporciona métodos estáticos y por defecto útiles para la combinación and(), or(), negate(), isEqual()
33
Conclusiones El paquete functions proporciona una amplia gama e interfaces funcikonales Ampliamente utilizada en Streams Poco probable que necesite definir sus propias extensiones al paquete functions
34
Métodos y Constructor
35
Referencias DE método Las referencias de método nos permite reutilizar un método como una expresión lambda
36
Referencias de método Formato: referencia_objetivo::nombre_metodo
Más detalles Formato: referencia_objetivo::nombre_metodo tres tipos de referencias de método Static method Instance method of an arbitrary type Instance method of an existing object
37
Referencias de método Reglas de construcción
38
Referencias de método Ejemplos:
39
Referencias de constructores
Mismo concepto de referencias de método Para el constructor
40
Conclusiones Las referencias de método proporcionan una notación compacta para las lambdas simples Existen tres tipos dependiendo en como son utilizadas Pueden también ser utilizadas para constructores
41
Referenciacion a variables externas en las expresiones lambda
42
Captura de variable local
Expresiones lambda pueden referenciar a variables locales finales del ámbito final: una variable que cumple los requerimientos de las variables Closures sobre los valores no sobre las variables
43
¿Qué significa this en una lambda
‘this’ se refiere al objeto envolvente, no a la misma lambda Piense en this como un “final predefined local” Recuerde que la lambda es una función anonima No esta asociada con una clase `pr lo tanto no existe un “this” para la lambda
44
Referenciación a variables de instancia
Cuales no son finales o efectivamente finales
45
Referenciación a variables de instancia
Las cuales no son finales o efectivamente finales ‘this’ (efectivamente final) es insertado por el compilador
46
Conclusiones Las variables en el ámbito circundante pueden ser utilizadas en las expresiones lambda Pero deben ser final o efectivamente final ‘this’ en una lambda se refiere al objeto del ámbito circundante el compilador insertará una referencia a ‘this’ donde sea necesario
47
Nuevos métodos útiles en jdk 8 que pueden utilizar lambdas
48
interfaz iterable
49
Interface Collection
50
Interface List
51
Interface List
52
Clase Logger
53
Conclusiones Utilice los nuevos métodos del JDK 8 para eliminar la necesidad de biucles Recuerde que una lambda proporciona comportamiento, no un valor Útiles para el uso condicional de datos
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.