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"));
}
}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);
}
}[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.