AnyCompiler

Lambdas y Streams

Una expresión lambda, escrita params -> expression, es una forma compacta de implementar una functional interface — una interface con exactamente un method abstract — de forma inline, sin escribir una class nombrada separada. Greeter abajo tiene un method, greet(), así que una lambda puede implementarlo directamente.

public class Main {
    interface Greeter {
        String greet(String name);
    }

    public static void main(String[] args) {
        Greeter greeter = name -> "Hello, " + name + "!";
        System.out.println(greeter.greet("Java"));
    }
}
Output
Hello, Java!

La Stream API

Un stream te permite encadenar operaciones como filter y map sobre una colección, terminando con una operación terminal como collect para producir un resultado. numbers.stream().filter(...).map(...).collect(...) se lee casi como una descripción de la propia transformación — conserva los números pares, duplícalos, junta el resultado en una list.

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

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = List.of(1, 2, 3, 4, 5);
        List<Integer> doubled = numbers.stream()
            .filter(n -> n % 2 == 0)
            .map(n -> n * 2)
            .collect(Collectors.toList());
        System.out.println(doubled);
    }
}
Output
[4, 8]

Siguiente: static y final — miembros a nivel de class, y marcar algo como inmodificable.

Practice exercise

Dado List<Integer> numbers que contiene 1, 2, 3, 4, usa un stream para construir una nueva list con cada número elevado al cuadrado, luego imprímela.