Explorando forEach, Stream,
Lambdas e Referências de Métodos
( ::) em Java
Bora lá
Primeiro de tudo!
Vamos mergulhar no mundo do Java e aprender sobre
alguns conceitos importantes que ajudam a escrever
código de forma mais elegante e eficiente. Vamos
entender o que são interfaces de coleções, forEach,
Stream, Lambdas e referências de métodos (::) em
Java, explicando cada um em uma ordem que faça
sentido.
Interfaces de Coleções
Primeiro, precisamos falar sobre as interfaces
de coleções . Em Java, uma coleção é um
objeto que agrupa múltiplos elementos em uma
única unidade. As interfaces de coleções, como
`L List, Set, e Map, fornecem formas de
trabalhar com esses grupos de elementos.
Exemplo:
List: Uma coleção ordenada que pode conter elementos
duplicados. Exemplo: lista de nomes.
Set: Uma coleção que não pode conter elementos
duplicados. Exemplo: conjunto de números únicos.
Map: Uma coleção de pares chave-valor. Exemplo: agenda de
contatos onde cada nome tem um número de telefone
associado.
Mais exemplo:
Exemplo de uma List:
Java:
List<String> nomes = [Link]("Alice", "Bob", "Charlie");
Lambdas
Antes de falar sobre forEach e Stream,
precisamos entender Lambdas . Lambdas são
funções anônimas que podem ser usadas para
implementar métodos de interfaces funcionais de
forma concisa. Pense nelas como atalhos para
escrever pequenas funçõe
Exemplo de Lambda:
// Lambda que recebe um número e imprime ele
Consumer<Integer> imprimeNumero = numero -> [Link](numero);
O que é forEach?
O método forEach permite executar uma
ação para cada elemento de uma coleção.
Pense nele como uma maneira de dizer à
coleção: "Para cada item, faça isso".
Geralmente, usamos forEach com lambdas.
Exemplo de forEach com Lambda:
List<Integer> numeros = [Link](1, 2, 3, 4, 5);
[Link](numero -> [Link](numero));
Aqui, [Link](numero ->
[Link](numero)) está dizendo: "Para cada
número na lista, imprima-o".
O que é Stream?
Um Stream é como uma linha de montagem de
fábrica para seus dados. Ele permite processar uma
sequência de elementos de forma declarativa, ou seja,
dizendo o que fazer em vez de como fazer. Stream
trabalha muito bem com lambdas para realizar
operações como filtragem, mapeamento e redução.
Exemplo básico de Stream com Lambda:
List<Integer> numeros = [Link](1, 2, 3, 4, 5);
[Link]()
.filter(n -> n % 2 == 0)
.forEach(n -> [Link](n));
Neste exemplo:
Neste exemplo:
1. [Link]() cria um fluxo de números.
2. filter(n -> n % 2 == 0) filtra apenas os
números pares.
3. forEach(n -> [Link](n)) imprime
cada número par.
O que são Referências de Métodos ( ::)?
Referências de métodos são uma forma curta e
elegante de referenciar um método. Em vez de
usar uma função lambda, podemos
diretamente referenciar o método que
queremos usar. Isso torna o código mais limpo
e legível.
Exemplo de Referência de Método:
List<String> nomes = [Link]("Alice", "Bob", "Charlie");
[Link]([Link]::println);
Em vez de [Link](nome -> [Link](nome)),
usamos [Link]::println, que faz a mesma coisa de uma forma mais concisa.
Juntando Tudo
Vamos combinar forEach,
Stream, lambdas e referências de
métodos em um exemplo completo.
Exemplo Completo:
.
Neste exemplo:
[Link]() cria um fluxo de nomes.
filter(nome -> [Link]("A"))
filtra os nomes que começam com "A".
forEach([Link]::println) imprime cada
nome filtrado.
Resumindo
Interfaces de Coleções : Estruturas como List, Set e Map que ajudam a
organizar e manipular grupos de dados.
Lambdas : Funções anônimas que permitem escrever métodos de forma concisa.
forEach: Executa uma ação para cada item de uma coleção.
Stream: Uma maneira poderosa de manipular coleções de dados de forma
declarativa.
Referências de Métodos ( ::) : Uma forma elegante de usar métodos existentes,
tornando o código mais limpo e legível.