"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Streams y Lambdas en Java: una guía para la programación funcional con ejemplos

Streams y Lambdas en Java: una guía para la programación funcional con ejemplos

Publicado el 2024-08-21
Navegar:123

Streams and Lambdas in Java: A Guide to Functional Programming with Examples

La programación funcional es un enfoque ampliamente utilizado en el desarrollo de software moderno. Java, al ser un lenguaje que admite programación funcional y orientada a objetos, introdujo flujos y lambdas en su octava versión. Estas características permiten a los desarrolladores aplicar estilos funcionales a las colecciones, haciendo que las operaciones en las colecciones sean más eficientes y limpias.

Transmisiones en Java
Los flujos en Java convierten una colección en un flujo de elementos. Permiten a los desarrolladores realizar operaciones funcionales en colecciones como mapeo, filtrado y reducción. Las transmisiones se utilizan mejor para operaciones que implican transformación, agregación o filtrado de datos.

Un ejemplo de uso de secuencias es ordenar una lista de nombres en orden alfabético. Podemos crear una lista de nombres y luego usar secuencias para ordenarlas como se muestra a continuación:

List nombres = Arrays.asList("John", "Mary", "David", "Emily", "Tom");
nombres.stream().sorted().forEach(System.out::println); //salida: David, Emily, John, Mary, Tom

Aquí, hemos creado una secuencia usando el método stream() en la lista. Luego aplicamos el método sorted() para ordenar los elementos de la secuencia en orden natural. Finalmente, el método forEach() se utiliza para imprimir cada elemento en la secuencia.

Lambdas en Java
Lambdas se utilizan para definir funciones de primera clase en Java. Estas funciones pueden consumir elementos de una secuencia y realizar operaciones sobre ellos. Las lambdas se definen fuera de una clase y se pueden pasar como argumentos a funciones.

Para usar lambdas con transmisiones, debemos comprender el concepto de interfaces funcionales. Estas son interfaces que tienen un solo método abstracto. Las expresiones Lambda se pueden utilizar para proporcionar una implementación concreta del método abstracto de una interfaz funcional.

Ordenar una lista de nombres usando lambdas
Basándonos en el ejemplo anterior, ordenemos los nombres en orden descendente usando lambdas.

List nombres = Arrays.asList("John", "Mary", "David", "Emily", "Tom");
nombres.stream().sorted((a, b) -> b.compareTo(a)).forEach(System.out::println)); //salida: Tom, Mary, John, Emily, David

Aquí, hemos utilizado una expresión lambda como argumento para el método sorted(). Esta función lambda acepta dos argumentos (ayb) y los compara, devolviendo un valor positivo, negativo o cero según la comparación. Esto nos permite ordenar los elementos en orden descendente usando el método compareTo() en los elementos.

Convertir una transmisión nuevamente en una colección
En algunos casos, es posible que queramos convertir una secuencia nuevamente en una colección después de realizar operaciones en ella. Podemos hacer esto usando el método Collect(), que toma un objeto Collector como argumento.

Lista nombres filtrados = nombres.stream()
.filter(nombre -> nombre.longitud() > 4) //mantener solo nombres con longitud > 4
.collect(Collectors.toList()); //devuelve una lista de nombres filtrados

El método Collect() toma una interfaz funcional de tipo Collector y la utiliza para acumular elementos en una colección. En el ejemplo anterior, hemos utilizado el método toList() de la clase Collectors para crear una lista de nombres filtrados.

Otras operaciones en transmisiones
Además de ordenar y filtrar, existen otras operaciones que se pueden realizar en transmisiones, como mapeo, reducción e iteración. Estas operaciones nos permiten transformar, reducir e iterar sobre los elementos de una secuencia respectivamente.

Asignar y reducir un flujo de números
Digamos que tenemos una lista de números y queremos encontrar la suma de todos los números pares. Podemos hacer esto usando los métodos map() y reduce().

Lista de números = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int suma = números.stream()
.filter(num -> num % 2 == 0) //filtrar números impares
.map(num -> num * 2) //duplicar los números pares
.reduce(0, (a, b) -> a b); //suma todos los números

Aquí, hemos usado el método map() para duplicar los números pares en la secuencia y luego usamos el método reduce() para sumar todos los números. El resultado es una suma de todos los números pares de la lista.

Operaciones de reutilización en transmisiones
En algunos casos, es posible que necesitemos utilizar la misma operación funcional en varias transmisiones. Para evitar escribir el mismo código una y otra vez, podemos crear una interfaz funcional y pasarla como argumento a los métodos.

Tomemos el ejemplo de ordenar una lista de nombres por apellido. Podemos crear una clase de comparación que implemente la interfaz Comparator y pasarla como argumento al método sorted().

la clase estática LastNameComparator implementa Comparator {
@Anular
public int compare (nombre de cadena1, nombre de cadena2) {
Cadena[] partes1 = nombre1.split(" ");
Cadena apellido1 = partes1[partes1.longitud - 1];
Cadena[] partes2 = nombre2.split(" ");
Cadena apellido2 = partes2[partes2.longitud - 1];
devolver apellido2.compareTo(apellido1);
}
}

nombres.stream().sorted(new LastNameComparator()).forEach(System.out::println); //salida: Emily, David, John, Mary, Tom

Aquí, hemos pasado LastNameComparator como argumento al método sorted() para ordenar los nombres por apellido.

Conclusión
Los flujos y lambdas en Java proporcionan una forma poderosa y eficiente de realizar operaciones funcionales en colecciones. Permiten a los desarrolladores escribir código limpio, conciso y reutilizable. Al comprender los conceptos de flujos y lambdas, podemos mejorar nuestras habilidades generales de codificación y escribir código más eficiente.

Un método eficaz para mejorar sus habilidades en Java es obtener la última certificación de Java y utilizar las pruebas de práctica 1Z0-830 disponibles en MyExamCloud.

Declaración de liberación Este artículo se reproduce en: https://dev.to/myexamcloud/streams-and-lambdas-in-java-a-guide-to-functional-programming-with-examples-4cij?1 Si hay alguna infracción, por favor contacto Study_golang@163 .comeliminar
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3