Que es una expresion lambda
Es una interfaz que puede o no estat anotada con @FunctionalInterface, si lo esta el compilador verificara que cumpla con las siguientes reglas:
Debemos considerar que los metodos propios de la clase Object se excluyen de estas reglas, es decir no cuentan como metodos de una functional interface, aunque no debemos de modificarlos, una lamda no debe modificar los metodos heredados de Object
Como se podia hacer el comportamiento de una lambda antes de java 8
Por medio de implementar una clase anonima
Cual es la ventaja de las expresiones lamdas comparado con las clases anonimas
Las lamdas son:
Cuales son los pasos para pasar una clase anonima a una lamda normal
En que lugar se pueden ocupar lambdas
En parametros de entrada y como tipos de salida(return)
Que tipo de objeto es una lamda
Es un objeto sin identidad, la diferencia entre una clase anonima y yna lamda es que para crear una clase anonima necesitamos usar new, lo cual implica que debemos realizar todo el proceso de inicializacion de un objeto comun y corriente
y con una expresion lamda no, en ese sentido es mas eficiente utilizar lamdas ya que no tenemos ese overhead
Cuales son los tipos de lamdas
Con que otra notacion se pueden crear las lamdas
Se llama method reference y es un shortcut los pasos son los siguientes
Omitir la parte de los parametros, es decir los parentesis()
Ponemos parte de los simbolos ->
Llamamos el metodo por medio de :: ejemplo System.out::println
Un ejemplo quedaria asi Comparator s = num -> Integer::compare
Cabe señalar que NO soportan argumentos por ejemplo m.age>20 se tendria que hacer con la notacion normal
Cuales son los metodos default y metodos estaticos en Java 8
Son metodos los cuales podemos o no tener en una interfaz funcional y loque se hace es que se implementan directamente en la interfaz, esto se realizo asi debido a que de esta manera se no se rompe la backward compatibility, imaginemos que agregabamos un metodo a la interfaz List, esto haria que todas nuestras versiones tuvieran que implementarlo, al hacer metodos default nos permite agregar ese metodo y tenerlo sin necesidad de implementarlo y romper el contrato, al igual podemos tener cero o muchos metodos estaticos en una interfaz y se comportara de la misma manera que un metodo estatico en una clase
Describe el patron map/filter/reduce
Es un patron que nos permite procesar nuestra informacion, imaginemos que tenemos una lista de personas que tengan entre 20 y 25 años entre las personas contenidas en la lista,la descripcion seria la siguiente:
Que es un stream
Tecnicamente es una interfaz generica,
Si un stream no almacena informacion, entonces que es lo que pasa cuando un paso intermedio dentro de un map/filter/reduce regresa un stream?
No pasa nada, en realidad es solo una marca que indica que debe de continuar la ejecucion del siguiente paso, es decir es un paso intermedio y en el momento de que el siguiente paso es una operacion terminal, ese sera nuestro trigger para ejecutar todos los pasos, pero mientras haya pasos intermedios (que regresen un stream) continuarra ejecutando los pasos siguientes
Como podemos identificar una operacion final y una operacion intermedia
Cual es la diferencia entre un map y un flatmap
supongamos que tenemos las siguientes listas
a=[1,2,3,4]
b=[5,6]
c=[7,8,9]
en map seria asi [[1,2,3,4], [5,6], [7,8,9]]
en flatmap seria asi: [1,2,3,4,5,6,7,8,9]
***A que se refieran los optionals
Cuales son los tipos de reducciones
Reducciones de agregation(max, count, allMatch,noneMatch, anyMatch, findFirst, findAny)
Reducciones con operaciones terminales (reduce)
Que don los reducciones mutables
Es cuando queremos reducir una lsita a un mapa
Que caracteristicas tienen los parametros en una lamda
En genericos cual es la diferencia cuando tenemos un metodo estatico y uno de instancia
Cuando es un metodo no estatico(de instancia) utilizamos la misma variable que se definio como generica en la clase
Si es un metodo estatico debemos definir otro generico
Ejemplo
public class Comparator<t>{</t>
private T compareOne(T other){
……
}
public static compareStatic(U u){
}
}
Como se crean las nuevas APIs
De debe de hacer uso de lamdas, metodos default y metodos estaticos introducidos en java 8
Como se obtiene de una lista un stream
la lista definida ya tiene un metodo default llamado stream el cual nos va a permitir procesar la informacion .stream()
De que otra manera se pueden construir streams
Por medio de metodos estaticos
Stream.empty()
Stream.of(“one”,…)—Se puede especificar uno o muchos elementos dentro de los parentesis
Stream.generate(()->“one”)—De esta manera sera un stream constante, es decir que cada vez que pidamos a ese stream nos va a regresar siempre el valor “one”
Stram.iterate(“+”, s -> s + “+”)—En ese caso, va a generar un valor de agregacion, es decir va a ir contatenando las “+” por medio del metodo limit() podemos especificar el numero de elementos generados, ya que por default no tiene limite y lo hara infinitamente
ThreadLocaRandom.current().ints()—En este caso creara valores enteros de manera aleatoria, current tiene mas metodos relacionados a cada primitivo, por ejemplo Double etc
Tambien podemos crear streams por medio de expresiones regulares
En archivos podemos crear streams que lean la linea completa
Describe el builder para construir un stream
Se hace por añaden elementos por medio de los siguientes metodos:
Como podemos trabajar con primitivos y lamndas
Existen algunos metodos casados con los tipos primitivos, en este caso nos regresara valores primitivos y no objetos
IntPredicate
IntFunction
IntToDobleFunction