Introducción
Las expresiones lambda son bloques de código que pueden ser pasados como argumento de una función. En Java, más concretamente, son similares (aunque no idénticas) a las clases anónimas. Es necesaria la versión 8 para poder usarlas.
Interfaces
Para usar lambdas con interfaces necesitamos que sean interfaces funcionales. Es decir, que solo tengan un único método.
Creamos una interfaz funcional:
package com.luisgomezcaballero.lambdas; interface MyInterface { void myInterfaceMethod(); }
Ahora una clase que la implemente:
package com.luisgomezcaballero.lambdas; class MyImplementation implements MyInterface { @Override public void myInterfaceMethod() { System.out.println("myImplementationMessage"); } }
Y ahora un servicio que use dicha implementación:
package com.luisgomezcaballero.lambdas; class MyService { public void myServiceMethod(MyImplementation myImplementation) { myImplementation.myInterfaceMethod(); } }
Sin expresiones lambda:
MyImplementation myImplementation = new MyImplementation(); myImplementation.myInterfaceMethod();
Con expresiones lambda:
MyInterface myLambdaFunction = () -> System.out.println("myLambdaMessage"); myLambdaFunction.myInterfaceMethod();
Al ejecutar vemos que se según usemos una forma u otra, veremos diferentes mensajes por consola.
Hilos
También pueden usarse expresiones lambda con hilos.
Normalmente siempre se ha usado Thread con la interfaz Runnable, de este modo:
Thread myNormalThread = new Thread(new Runnable() { @Override public void run() { System.out.println("myNormalThreadMessage"); } }); myNormalThread.run();
Pero podemos hacerlo mucho más simple usando una expresión lambda:
Thread myLambdaThread = new Thread(() -> System.out.println("myLambdaThreadMessage")); myLambdaThread.run();
De nuevo, según qué código lancemos se imprimirá por pantalla un mensaje u otro.
Repositorio
El código de este proyecto que ha servido para demostrar el uso de expresiones lambda puede encontrarse en https://github.com/luisgomezcaballero/lambdas-demo.
So, what do you think ?