DEV Community

FUNDAMENTOS JAVA
FUNDAMENTOS JAVA

Posted on

Capítulo 3: Interfaces funcionais

No Java 8, interfaces funcionais são aquelas que possuem apenas um método abstrato. Elas podem ser instanciadas usando expressões lambda, facilitando a programação funcional e tornando o código mais conciso e legível.

🔹 Exemplo 1: Uso de Consumer
A interface Consumer possui um único método abstrato (accept(T t)), permitindo que seja usada com expressões lambda:

//Consumer<T>: Usado para consumir um valor sem retornar nada, como imprimir valores:
        Consumer<String> print = System.out::println;
        List<String> usuarios = List.of("Alice", "Bob", "Charlie");
        usuarios.forEach(print::accept);
Enter fullscreen mode Exit fullscreen mode

Caso a interface tivesse mais de um método abstrato, o compilador não conseguiria inferir automaticamente qual método implementar.

🔹 Exemplo 2: Uso de Runnable (Pré e Pós-Java 8)
Antes do Java 8, ao criar uma Thread, a interface Runnable era instanciada da seguinte forma:

Runnable r = new Runnable() {
    public void run() {
        for (int i = 0; i <= 1000; i++) {
            System.out.println(i);
        }
    }
};
new Thread(r).start();

Enter fullscreen mode Exit fullscreen mode

Com expressões lambda, o código fica mais enxuto:

Runnable r = () -> {
    for (int i = 0; i <= 1000; i++) {
        System.out.println(i);
    }
};
new Thread(r).start();

Enter fullscreen mode Exit fullscreen mode

Ou ainda mais simplificado:

new Thread(() -> {
    for (int i = 0; i <= 1000; i++) {
        System.out.println(i);
    }
}).start();

Enter fullscreen mode Exit fullscreen mode

🔹 O Pacote java.util.function
O Java 8 introduziu o pacote java.util.function, que contém várias interfaces funcionais reutilizáveis, como:

Consumer – executa uma ação com um argumento.
Function – transforma um tipo em outro.
Supplier – fornece um valor sem argumento.
Predicate – retorna um booleano com base em uma condição.

No decorrer do estudo, mais dessas interfaces serão exploradas. 🚀

Top comments (0)