20. Expressões Lambda em Java

As expressões lambda em Java representam uma das características mais significativas introduzidas na versão 8 do Java, que trouxe uma nova forma de lidar com a programação funcional dentro de um ecossistema orientado a objetos. Essas expressões permitem a criação de instâncias de interfaces funcionais (interfaces com um único método abstrato) de maneira concisa e legível, melhorando a expressividade do código e facilitando a implementação de operações que envolvem, por exemplo, coleções e fluxos de dados.

Introdução às Expressões Lambda

Uma expressão lambda pode ser entendida como uma função anônima que não possui um nome, mas tem uma lista de parâmetros, um corpo, um tipo de retorno e, possivelmente, uma lista de exceções que podem ser lançadas. A sintaxe básica de uma expressão lambda é a seguinte:

(param1, param2, ...) -> { corpo da expressão }

Por exemplo, considere a interface funcional Comparator, que define um único método abstrato para comparar dois objetos. Sem lambda, você implementaria uma instância dessa interface da seguinte maneira:

Comparator<String> stringComparator = new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.compareTo(s2);
    }
};

Com expressões lambda, o mesmo pode ser feito de forma muito mais sucinta:

Comparator<String> stringComparator = (s1, s2) -> s1.compareTo(s2);

Benefícios das Expressões Lambda

As expressões lambda trazem diversos benefícios para o desenvolvimento em Java:

  • Menos Código Verboso: Reduzem a quantidade de código necessária para implementar interfaces funcionais, tornando o código mais limpo e fácil de ler.
  • Facilidade com Coleções: Facilitam operações com coleções, como filtrar, mapear e reduzir, através dos métodos da API de Streams.
  • Paralelismo: Permitem uma manipulação mais eficiente de coleções em paralelo, aproveitando múltiplos núcleos do processador de forma transparente.
  • Encorajam a Programação Funcional: Incentivam um estilo de programação funcional, onde funções podem ser passadas como argumentos, retornadas ou armazenadas em estruturas de dados.

Exemplos Práticos de Uso de Lambda

Vamos explorar alguns exemplos práticos de como as expressões lambda podem ser utilizadas em Java:

Filtrando uma Lista

Suponha que você tenha uma lista de strings e deseja filtrar todas as strings que começam com a letra "J". Sem lambda, você faria algo assim:

List<String> filteredList = new ArrayList<>();
for (String s : list) {
    if (s.startsWith("J")) {
        filteredList.add(s);
    }
}

Com lambda e a API de Streams, o mesmo pode ser feito de forma mais elegante:

List<String> filteredList = list.stream()
    .filter(s -> s.startsWith("J"))
    .collect(Collectors.toList());

Aplicando uma Função a Todos os Elementos de uma Lista

Se você quiser aplicar uma função a todos os elementos de uma lista para criar uma nova lista com os resultados, você poderia fazer assim com lambda:

List<Integer> lengths = list.stream()
    .map(String::length)
    .collect(Collectors.toList());

Combinando Elementos de uma Lista

Para combinar elementos de uma lista em um único valor, como somar todos os números em uma lista de inteiros, você pode usar o método reduce da API de Streams:

int sum = integers.stream()
    .reduce(0, (a, b) -> a + b);

Considerações sobre o Uso de Lambda

Embora as expressões lambda ofereçam muitas vantagens, elas também exigem cuidado em seu uso. É importante não abusar delas, pois podem tornar o código difícil de entender se usadas de forma excessiva ou inapropriada. Além disso, em alguns casos, o uso de métodos de referência (como String::length no exemplo acima) pode ser ainda mais conciso e claro do que uma expressão lambda.

Outro ponto a considerar é a questão do escopo. As expressões lambda têm acesso ao escopo em que são criadas, o que significa que elas podem acessar variáveis locais finais ou efetivamente finais (variáveis que não são alteradas após a inicialização) do método onde estão definidas.

Conclusão

As expressões lambda em Java são uma poderosa ferramenta que, quando usadas corretamente, podem tornar o código mais claro, conciso e expressivo. Elas são particularmente úteis ao trabalhar com coleções e APIs que se beneficiam de um estilo de programação funcional. Ao aprender a utilizar expressões lambda, você estará adicionando uma habilidade essencial ao seu repertório como desenvolvedor Java, que certamente encontrará muitas aplicações práticas no dia a dia da programação.

Agora responda o exercício sobre o conteúdo:

Qual das seguintes afirmações sobre expressões lambda em Java é correta?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Streams e a API de Stream em Java

Próxima página do Ebook Gratuito:

116Streams e a API de Stream em Java

5 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto