Tutoriales de Java

Java INICIO Introducción a Java Introducción a Java Sintaxis Java Comentarios Java Variables Java Tipos de datos Java Conversión de tipos de Java Operadores Java Cadenas Java Matemáticas Java Booleanos de Java Java si... si no Conmutador de Java Ciclo while de Java Java para bucle Java Pausa/Continuar Matrices de Java

Métodos de Java

Métodos de Java Parámetros del método Java Sobrecarga del método Java Alcance de Java Recursión de Java

Clases Java

programación orientada a objetos de Java Clases/Objetos Java Atributos de clase de Java Métodos de clase Java Constructores Java Modificadores de Java Encapsulación de Java Paquetes Java/API Herencia de Java Polimorfismo de Java Clases internas de Java Abstracción de Java Interfaz Java Enumeraciones de Java Entrada de usuario de Java Fecha Java Java ArrayList Java LinkedList Mapa hash de Java HashSet de Java Iterador de Java Clases contenedoras de Java Excepciones de Java Java expresión regular Subprocesos de Java Java lambda

Manejo de archivos Java

Archivos Java Java crear/escribir archivos Archivos de lectura de Java Eliminar archivos de Java

Java Cómo

Añadir dos números

Referencia Java

Palabras clave de Java Métodos de cadena de Java Métodos matemáticos de Java

Ejemplos de Java

Ejemplos de Java Compilador Java Ejercicios Java Cuestionario Java Certificado Java


Expresiones Java Lambda


Expresiones Java Lambda

Las expresiones lambda se agregaron en Java 8.

Una expresión lambda es un bloque corto de código que toma parámetros y devuelve un valor. Las expresiones lambda son similares a los métodos, pero no necesitan un nombre y se pueden implementar directamente en el cuerpo de un método.


Sintaxis

La expresión lambda más simple contiene un solo parámetro y una expresión:

parameter -> expression

Para usar más de un parámetro, envuélvalos entre paréntesis:

(parameter1, parameter2) -> expression

Las expresiones son limitadas. Deben devolver inmediatamente un valor y no pueden contener variables, asignaciones o declaraciones como ifo for. Para realizar operaciones más complejas, se puede usar un bloque de código con llaves. Si la expresión lambda necesita devolver un valor, entonces el bloque de código debe tener una returndeclaración.

(parameter1, parameter2) -> { code block }

Uso de expresiones lambda

Las expresiones lambda generalmente se pasan como parámetros a una función:

Ejemplo

Use una expresión lamba en el ArrayListmétodo forEach()para imprimir cada elemento de la lista:

import java.util.ArrayList;

public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(9);
    numbers.add(8);
    numbers.add(1);
    numbers.forEach( (n) -> { System.out.println(n); } );
  }
}

Las expresiones lambda se pueden almacenar en variables si el tipo de variable es una interfaz que tiene un solo método. La expresión lambda debe tener la misma cantidad de parámetros y el mismo tipo de retorno que ese método. Java tiene muchos de estos tipos de interfaces integrados, como la Consumerinterfaz (que se encuentra en el java.utilpaquete) utilizada por las listas.

Ejemplo

Use la interfaz de Java Consumerpara almacenar una expresión lambda en una variable:

import java.util.ArrayList;
import java.util.function.Consumer;

public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(9);
    numbers.add(8);
    numbers.add(1);
    Consumer<Integer> method = (n) -> { System.out.println(n); };
    numbers.forEach( method );
  }
}

Para usar una expresión lambda en un método, el método debe tener un parámetro con una interfaz de método único como tipo. Llamar al método de la interfaz ejecutará la expresión lambda:

Ejemplo

Cree un método que tome una expresión lambda como parámetro:

interface StringFunction {
  String run(String str);
}

public class Main {
  public static void main(String[] args) {
    StringFunction exclaim = (s) -> s + "!";
    StringFunction ask = (s) -> s + "?";
    printFormatted("Hello", exclaim);
    printFormatted("Hello", ask);
  }
  public static void printFormatted(String str, StringFunction format) {
    String result = format.run(str);
    System.out.println(result);
  }
}