Lambdas e Streams
Uma expressão lambda, escrita params -> expression, é uma forma compacta de implementar uma functional interface — uma interface com exatamente um method abstract — de forma inline, sem escrever uma class nomeada separada. Greeter abaixo tem um method, greet(), então uma lambda pode implementá-lo diretamente.
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!
A Stream API
Um stream deixa você encadear operações como filter e map sobre uma coleção, terminando com uma operação terminal como collect para produzir um resultado. numbers.stream().filter(...).map(...).collect(...) se lê quase como uma descrição da própria transformação — mantenha os números pares, dobre-os, junte o resultado em uma 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]
A seguir: static e final — membros em nível de class, e marcar algo como inalterável.
Practice exercise
Dado List<Integer> numbers contendo 1, 2, 3, 4, use um stream para construir uma nova list com cada número elevado ao quadrado, depois imprima-a.