Categorías
Java 8 Lambda Expression

5 diferentes sintaxis de expresión lambda

1. Sintaxis estándar

Considere este ejemplo:

String[] arr = {"program", "creek", "is", "a", "java", "site"};
Arrays.sort(arr, (String m, String n) -> Integer.compare(m.length(), n.length()));
System.out.println(Arrays.toString(arr));

La sintaxis estándar de una expresión lambda consta de lo siguiente:

  1. Una lista separada por comas de parámetros formales entre paréntesis. En este caso lo es (String m, String n)
  2. La ficha de flecha ->
  3. Un cuerpo, que consta de una sola expresión o un bloque de instrucciones. En este caso, es una sola expresión: Integer.compare(m.length(), n.length())
Output:
[a, is, java, site, creek, program]

2. El tipo de parámetro se puede inferir

Si el tipo de parámetro de un parámetro se puede inferir del contexto, el tipo se puede omitir.

En el código anterior, el tipo de myn se puede inferir a String, por lo que el tipo se puede omitir. Esto hace que el código sea más limpio y más parecido a una expresión lambda real.

String[] arr = { "program", "creek", "is", "a", "java", "site" };
Arrays.sort(arr, (m, n) -> Integer.compare(m.length(), n.length()));
System.out.println(Arrays.toString(arr));

3. Varias líneas de código en la expresión Lambda

Si el código no se puede escribir en una línea, se puede incluir entre {}. El código ahora debería contener explícitamente una declaración de retorno.

String[] arr = { "program", "creek", "is", "a", "java", "site" };
Arrays.sort(arr, (String m, String n) -> {
	if (m.length() > n.length())
		return -1;
	else
		return 0;
});
System.out.println(Arrays.toString(arr));
Output:
[program, creek, java, site, is, a]

4. Parámetro único con tipo inferido

Los paréntesis se pueden omitir para la expresión lambda de un solo parámetro cuando se pueden inferir tipos.

String[] arr = { "program", "creek", "is", "a", "java", "site" };
Stream<String> stream = Stream.of(arr);
stream.forEach(x -> System.out.println(x));
Output:
a
is
java
site
creek
program

5. Referencias de métodos

El código anterior también se puede escribir como sigue utilizando referencias de método:

Stream<String> stream = Stream.of(arr);
stream.forEach(System.out::println);

6. Sin parámetro

Cuando no se usa ningún parámetro para una función, también podemos escribir la expresión lambda. Por ejemplo, puede tener el siguiente aspecto:

() -> {for(int i=0; i<10; i++) doSomthing();}