Ejemplos de Funciones Lambda con Streams en Java

En esta entrada, exploraremos cómo utilizar funciones lambda junto con Streams en Java a través de una lista de nombres de países. Las funciones lambda permiten escribir código más conciso y legible al procesar colecciones de datos. A continuación, presentaremos varios ejemplos que demuestran el uso de métodos comunes de la API de Streams.

Ejemplo de Clase: StreamCountryExample
Java
package org.example.tinajero;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamCountryExample {
	
    public static void main(String[] args) {
        List<String> countries = Arrays.asList("Argentina", "Brasil", "Chile", "Colombia", "Perú", "Venezuela", "Uruguay");

        // 🎯 filter(): Filtra los elementos que cumplen una condición.
        countries.stream()
                .filter(country -> country.length() > 6)
                .forEach(System.out::println);

        // 🚀 map(): Transforma los elementos aplicando una función.
        countries.stream()
                .map(String::toUpperCase)
                .forEach(System.out::println);

        // 📊 sorted(): Ordena los elementos del stream.
        countries.stream()
                .sorted()
                .forEach(System.out::println);

        // 💥 forEach(): Aplica una acción a cada elemento.
        countries.stream()
                .forEach(country -> System.out.println("País: " + country));

        // 🔗 reduce(): Combina todos los elementos en un solo valor.
        String concatenatedCountries = countries.stream()
                .reduce("", (a, b) -> a + " " + b);
        System.out.println("Países concatenados: " + concatenatedCountries.trim());

        // 📦 collect(): Recoge los elementos en una colección.
        List<String> countriesStartingWithC = countries.stream()
                .filter(country -> country.startsWith("C"))
                .collect(Collectors.toList());
        System.out.println("Países que empiezan con C: " + countriesStartingWithC);

        // ✨ distinct(): Elimina los elementos duplicados.
        List<String> countriesWithDuplicates = Arrays.asList("Argentina", "Brasil", "Brasil", "Chile", "Perú", "Argentina");
        countriesWithDuplicates.stream()
                .distinct()
                .forEach(System.out::println);

        // 🎚️ limit(): Limita el número de elementos procesados.
        countries.stream()
                .limit(4)
                .forEach(System.out::println);

        // 🔄 skip(): Omite un número específico de elementos.
        countries.stream()
                .skip(2)
                .forEach(System.out::println);

        // 🔍 anyMatch(): Verifica si algún elemento cumple una condición.
        boolean anyStartsWithU = countries.stream()
                .anyMatch(country -> country.startsWith("U"));
        System.out.println("¿Hay algún país que empiece con U?: " + anyStartsWithU);

        // 🔒 allMatch(): Verifica si todos los elementos cumplen una condición.
        boolean allHaveMoreThan4Letters = countries.stream()
                .allMatch(country -> country.length() > 3);
        System.out.println("¿Todos los países tienen más de 3 letras?: " + allHaveMoreThan4Letters);

        // ❌ noneMatch(): Verifica si ningún elemento cumple una condición.
        boolean noneStartsWithX = countries.stream()
                .noneMatch(country -> country.startsWith("X"));
        System.out.println("¿Ningún país empieza con X?: " + noneStartsWithX);
    }
    
}

Descripción de Ejemplos:
  1. filter(): Filtra los países con nombres que tienen más de 6 letras.
  2. map(): Convierte todos los nombres de los países a mayúsculas.
  3. sorted(): Ordena los nombres de los países alfabéticamente.
  4. forEach(): Imprime cada nombre de país con un prefijo.
  5. reduce(): Combina todos los nombres de los países en una sola cadena.
  6. collect(): Recoge los nombres de los países que comienzan con “C” en una lista.
  7. distinct(): Elimina los nombres duplicados de la lista de países.
  8. limit(): Limita la salida a los primeros 4 países de la lista.
  9. skip(): Omite los primeros 2 países y muestra el resto de la lista.
  10. anyMatch(): Verifica si hay algún país que empiece con “U”.
  11. allMatch(): Comprueba si todos los países tienen más de 3 letras.
  12. noneMatch(): Verifica si no hay ningún país que empiece con “X”.
Conclusión

Estos ejemplos muestran cómo se pueden utilizar funciones lambda junto con la API de Streams para procesar colecciones de datos de manera efectiva y concisa. Experimenta con estos ejemplos y modifica los criterios para ver cómo se comportan los diferentes métodos. ¡Explora el poder de las funciones lambda en Java!