O que mudou no Java 8: os 5 recursos que modernizaram o Java

Wagner BarbosaWagner Barbosa
3 min read

O Java 8, lançado em 2014, representou uma das maiores atualizações da linguagem desde sua criação. Ele introduziu conceitos da programação funcional, trouxe APIs mais modernas e possibilitou uma maneira mais elegante e concisa de escrever código.

Neste artigo, destaco os 5 recursos mais importantes dessa versão — com exemplos e comentários — para quem quer entender por que o Java 8 é tão relevante até hoje.


🔹 1. Expressões Lambda

Lambda expressions permitem representar funções como objetos. Isso reduz a verbosidade do código e facilita muito a programação funcional, especialmente quando lidamos com eventos, callbacks e coleções.

Antes do Java 8:

javaCopyEditbutton.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent e) {
        System.out.println("Clique!");
    }
});

Com Java 8 (Lambda):

javaCopyEditbutton.setOnAction(e -> System.out.println("Clique!"));

💡 Comentário: O código fica mais limpo e direto ao ponto. Você define apenas o que interessa: a ação que será executada. Nada de classes anônimas gigantes só para um pequeno comportamento.


🔹 2. Streams API

A Streams API (java.util.stream) trouxe uma forma declarativa de processar coleções. É como montar um "pipeline" de operações sobre dados, com foco em leitura, filtragem, transformação e coleta.

Exemplo simples:

javaCopyEditList<String> nomes = Arrays.asList("Ana", "Bruno", "Carlos");

nomes.stream()
     .filter(n -> n.startsWith("B"))
     .map(String::toUpperCase)
     .forEach(System.out::println);

🎯 Comentário: Aqui estamos criando uma sequência de operações encadeadas: filtrando nomes que começam com "B", convertendo para maiúsculas e imprimindo. A API é poderosa, e o código, muito legível.


🔹 3. Optional

Quantas vezes você já se deparou com NullPointerException? O Optional<T> ajuda a evitar isso ao expressar de forma clara que um valor pode ou não estar presente.

Exemplo com Optional:

javaCopyEditOptional<String> nome = Optional.ofNullable(getNome());

nome.ifPresent(n -> System.out.println(n.toUpperCase()));

🚫 Comentário: Nada de if (obj != null) {...} espalhados pelo código. O uso de Optional nos força a tratar a ausência de valores de maneira explícita, melhorando a legibilidade e reduzindo erros.


🔹 4. Default Methods em Interfaces

Antes do Java 8, qualquer método adicionado a uma interface quebrava todas as implementações existentes. Agora, com default, podemos fornecer implementações diretamente na interface.

Exemplo:

javaCopyEditinterface Logavel {
    default void log(String mensagem) {
        System.out.println("[LOG] " + mensagem);
    }
}

🧩 Comentário: Esse recurso permitiu evoluir APIs sem prejudicar o código legado. Além disso, pode servir como forma de reutilização simples de comportamento entre classes.


🔹 5. Nova API de Data e Hora

A antiga java.util.Date era notoriamente confusa e mutável. O Java 8 trouxe uma nova API baseada no Joda-Time, mais robusta, imutável e fácil de usar: java.time.

Exemplo moderno:

javaCopyEditLocalDate hoje = LocalDate.now();
LocalDate vencimento = hoje.plusDays(10);

System.out.println("Data de vencimento: " + vencimento);

📅 Comentário: Datas e horários agora são tratados com clareza. Além de LocalDate, temos LocalTime, ZonedDateTime, Period, Duration, entre outras classes úteis.


✅ Conclusão

O Java 8 modernizou a linguagem com recursos que continuam sendo a base de muitos projetos até hoje. Lambdas, Streams e Optional, por exemplo, viraram parte essencial do dia a dia dos desenvolvedores Java.

Se você ainda está preso à forma antiga de programar, vale muito a pena explorar essas funcionalidades.

🔜 Próximo post: Vou mostrar as mudanças no Java 9 — incluindo o sistema de módulos (JPMS) e o REPL interativo do JShell.

#java #java8 #programacao #backend #streams #lambda #optional #javafunctional #hashnode

0
Subscribe to my newsletter

Read articles from Wagner Barbosa directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Wagner Barbosa
Wagner Barbosa