AnyCompiler

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