image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Lilian Rodrigues
Lilian Rodrigues12/02/2025 21:53
Compartilhe

Desbravando a Programação Funcional no Java: Consumer, Supplier, Predicate,BinaryOperator e Mais! 🔮

    A programação funcional no Java trouxe diversas interfaces e classes que facilitam a manipulação de dados de forma eficiente e expressiva. Entre elas, destacam-se Consumer, Supplier, Predicate, BinaryOperator, as operações da Stream API e a classe Optional. Vamos explorar cada uma delas! 🚀

    Consumer: Executando Ações sem Retorno 🚨

    A interface funcional Consumer aceita um argumento e executa uma ação sobre ele, sem retornar valor.

    Exemplo:

    import java.util.function.Consumer;
    
    public class ConsumerExample {
      public static void main(String[] args) {
          Consumer<String> imprimir = s -> System.out.println("Olá, " + s + "!");
          imprimir.accept("Java"); // Saída: Olá, Java!
      }
    }
    

    Supplier: Fornecendo Valores Sob Demanda 📦

    A interface Supplier não recebe parâmetros, mas retorna um valor do tipo especificado.

    Exemplo:

    import java.util.function.Supplier;
    
    public class SupplierExample {
      public static void main(String[] args) {
          Supplier<Double> randomNumber = () -> Math.random();
          System.out.println(randomNumber.get());
      }
    }
    

    Predicate: Testando Condições 🛡️

    A interface Predicate recebe um argumento e retorna um boolean, ideal para filtros e validações.

    Exemplo:

    import java.util.function.Predicate;
    
    public class PredicateExample {
      public static void main(String[] args) {
          Predicate<Integer> isEven = n -> n % 2 == 0;
          System.out.println(isEven.test(4)); // true
          System.out.println(isEven.test(7)); // false
      }
    }
    

    BinaryOperator: Operando sobre Dois Valores 🪨

    O BinaryOperator recebe dois argumentos do mesmo tipo e retorna um resultado do mesmo tipo.

    Exemplo:

    import java.util.function.BinaryOperator;
    
    public class BinaryOperatorExample {
      public static void main(String[] args) {
          BinaryOperator<Integer> soma = (a, b) -> a + b;
          System.out.println(soma.apply(10, 5)); // 15
      }
    }
    

    Stream API: Manipulação Eficiente de Coleções ♻️

    A Stream API permite processar coleções de forma funcional e eficiente.

    Exemplo com filter() e map():

    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class StreamExample {
      public static void main(String[] args) {
          List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5);
          List<Integer> quadrados = numeros.stream()
                                           .filter(n -> n % 2 != 0)
                                           .map(n -> n * n)
                                           .collect(Collectors.toList());
          System.out.println(quadrados); // [1, 9, 25]
      }
    }
    

    Optional: Evitando NullPointerException 🛡️

    A classe Optional ajuda a lidar com valores que podem ser null, evitando exceções indesejadas.

    Exemplo:

    import java.util.Optional;
    
    public class OptionalExample {
      public static void main(String[] args) {
          Optional<String> nome = Optional.ofNullable(null);
          System.out.println(nome.orElse("Valor padrão")); // Saída: Valor padrão
      }
    }
    

    Conclusão: O Poder da Programação Funcional no Java 🚀

    Com Consumer, Supplier, Predicate, BinaryOperator, Stream API e Optional, o Java se torna mais expressivo e poderoso. Essas ferramentas ajudam a reduzir código boilerplate e a tornar as soluções mais elegantes.

    Agora é sua vez! Qual dessas funcionalidades você mais usa no seu dia a dia? Comente e compartilhe suas experiências! 💬

    Compartilhe
    Comentários (0)