Expresiones Lambda y API Stream

JavaJavaBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá a usar dos de las características más importantes de Java 8: expresiones lambda y la API Stream. Las expresiones lambda se utilizan para crear funciones anónimas que se pueden pasar como argumentos a otros métodos, mientras que la API Stream se utiliza para realizar una secuencia de operaciones en una colección.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java(("Java")) -.-> java/ConcurrentandNetworkProgrammingGroup(["Concurrent and Network Programming"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/output("Output") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ProgrammingTechniquesGroup -.-> java/lambda("Lambda") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/interface("Interface") java/FileandIOManagementGroup -.-> java/files("Files") java/FileandIOManagementGroup -.-> java/stream("Stream") java/ConcurrentandNetworkProgrammingGroup -.-> java/working("Working") java/SystemandDataProcessingGroup -.-> java/system_methods("System Methods") subgraph Lab Skills java/if_else -.-> lab-117467{{"Expresiones Lambda y API Stream"}} java/output -.-> lab-117467{{"Expresiones Lambda y API Stream"}} java/collections_methods -.-> lab-117467{{"Expresiones Lambda y API Stream"}} java/lambda -.-> lab-117467{{"Expresiones Lambda y API Stream"}} java/interface -.-> lab-117467{{"Expresiones Lambda y API Stream"}} java/files -.-> lab-117467{{"Expresiones Lambda y API Stream"}} java/stream -.-> lab-117467{{"Expresiones Lambda y API Stream"}} java/working -.-> lab-117467{{"Expresiones Lambda y API Stream"}} java/system_methods -.-> lab-117467{{"Expresiones Lambda y API Stream"}} end

Configurar el entorno de Java

Primero, configure el entorno de Java instalando la última versión de Java en su sistema. Puede descargar e instalar Java desde el sitio web oficial. Después de la instalación, abra la terminal y verifique la versión de Java.

java -version

Crear un archivo Java

A continuación, cree un nuevo archivo Java en su directorio ~/proyecto llamado LambdaExpressions.java.

touch ~/project/LambdaExpressions.java

En este archivo, escribiremos código para implementar las expresiones lambda y la API Stream.

Usar una expresión lambda para calcular la suma de dos números

Las expresiones lambda proporcionan una forma fácil de crear funciones anónimas. Cree una FunctionalInterface que representará una función que tome dos números como entrada y devuelva su suma.

interface Calculator {
  int sum(int a, int b);
}

A continuación, podemos usar la expresión lambda para crear un objeto de esta interfaz y luego llamar a la función sum() usando ese objeto.

  Calculator adder = (a, b) -> a + b;
  int result = adder.sum(10, 20);
  System.out.println("Resultado: " + result);

Ahora, compile y ejecute este código usando el siguiente comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

La salida debe ser:

Resultado: 30

Iterar sobre una colección usando la API Stream

La API Stream se utiliza para realizar una secuencia de operaciones en una colección. En este paso, aprenderemos a iterar sobre una colección de cadenas y filtrar las cadenas que empiecen con "A".

Cree una lista de cadenas que contenga algunos nombres con los que trabajar.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Andy");

A continuación, use la API Stream para iterar sobre esta colección, filtrar las cadenas que empiecen con "A" y mostrar las restantes en la consola.

  names.stream().filter(s -> s.startsWith("A")).forEach(System.out::println);

Ahora, compile y ejecute este código usando el siguiente comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

La salida debe ser:

Alice
Andy

Usar la API Stream para encontrar el máximo y el mínimo de una lista de enteros

La API Stream proporciona una forma de realizar una secuencia de operaciones en una colección. En este paso, aprenderemos a usar la API Stream para encontrar los elementos máximo y mínimo de una lista de enteros.

Crea una lista de enteros

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

Encuentra el elemento máximo de la lista usando la API Stream.

Optional<Integer> maxNum = numbers.stream().max(Integer::compareTo);
System.out.println("Número máximo: " + maxNum.get());

Encuentra el elemento mínimo de la lista usando la API Stream.

Optional<Integer> minNum = numbers.stream().min(Integer::compareTo);
System.out.println("Número mínimo: " + minNum.get());

Ahora, compila y ejecuta este código usando el siguiente comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

La salida debe ser:

Número máximo: 30
Número mínimo: 2

Usar forEach() para imprimir los elementos de una lista

Podemos usar el método forEach() de la API Stream para iterar sobre una lista y realizar una acción en cada elemento.

Crea una lista de cadenas que contenga algunos nombres con los que trabajar.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");

Imprime todos los elementos de la lista usando el método forEach().

names.stream().forEach(System.out::println);

Ahora, compila y ejecuta este código usando el siguiente comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

La salida debe ser:

Alice
Bob
Charlie
Dave

Usar la API Stream para ordenar una colección

La API Stream se puede utilizar para ordenar una colección. En este paso, aprenderemos a ordenar una lista de enteros en orden ascendente.

Crea una lista de enteros con los que trabajar.

List<Integer> numbers = Arrays.asList(1, 3, 2, 4, 5);

Ordena la lista en orden ascendente utilizando el método sorted() de la API Stream.

numbers.stream().sorted().forEach(System.out::println);

Ahora, compila y ejecuta este código usando el siguiente comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

La salida debe ser:

1
2
3
4
5

Usar la API Stream para filtrar y ordenar una colección

En este paso, usaremos la API Stream para filtrar y ordenar una colección de enteros.

Crea una lista de enteros con los que trabajar.

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

Filtra solo los números pares y ordénalos en orden descendente usando el método sorted().

numbers.stream().filter(n -> n % 2 == 0).sorted(Comparator.reverseOrder()).forEach(System.out::println);

Ahora, compila y ejecuta este código usando el siguiente comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

La salida debe ser:

30
20
10
4
2

Usar la API Stream para obtener el promedio de una colección

En este paso, aprenderemos a usar la API Stream para obtener el promedio de una colección de enteros.

Crea una lista de enteros con los que trabajar.

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

Utiliza el método average() de la API Stream para obtener el promedio de la lista.

OptionalDouble avg = numbers.stream().mapToInt(Integer::intValue).average();
System.out.println("Promedio: " + avg.getAsDouble());

Ahora, compila y ejecuta este código usando el siguiente comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

La salida debe ser:

Promedio: 12.0

Crear un objeto Optional y comprobar si está vacío o no

En este paso, aprenderemos qué es Optional y cómo crear un objeto Optional.

Crea un objeto Optional de una cadena vacía.

Optional<String> emptyString = Optional.empty();

Comprueba si este objeto está vacío usando el método isPresent().

if(emptyString.isPresent()) {
    System.out.println(emptyString.get());
}
else {
    System.out.println("No hay valor");
}

Ahora, compila y ejecuta este código usando el siguiente comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

La salida debe ser:

No hay valor

Resumen

En este laboratorio, aprendimos cómo usar dos de las características más importantes de Java 8: expresiones lambda y la API Stream. Aprendimos cómo usar expresiones lambda para crear funciones anónimas, cómo usar la API Stream para realizar una secuencia de operaciones en una colección y cómo crear objetos Optional y comprobar si están vacíos o no. También vimos cómo usar la API Stream para ordenar, filtrar y obtener el promedio de una colección. Al dominar estas características, podemos escribir código eficiente y limpio con Java 8.