:::: MENU ::::

Expresiones lambda

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 ?