Por que eu tenho que usar a api de stream para fazer essas chamadas de métodos encadeadas? Não poderia fazer isso diretamente com as coleções existentes no Java? Qual seria o problema de fazer isso?
Por que eu tenho que usar a api de stream para fazer essas chamadas de métodos encadeadas? Não poderia fazer isso diretamente com as coleções existentes no Java? Qual seria o problema de fazer isso?
Olá, Matheus!
Entendo sua dúvida sobre a necessidade de usar a API de Stream no Java. Vamos lá!
A API de Stream, introduzida no Java 8, traz uma nova abordagem para lidar com conjuntos de dados de maneira eficiente e concisa. Ela permite que você realize operações em sequência (ou em "fluxo", daí o nome "Stream") em seus dados, como filtragem, mapeamento, redução, coleta, entre outras.
A principal diferença entre realizar essas operações com Streams e com as coleções tradicionais do Java é a abordagem. Com as coleções, você normalmente teria que usar loops (como for, while, etc) para iterar sobre os dados e realizar operações. Isso pode resultar em um código mais extenso e, em alguns casos, menos eficiente.
Por outro lado, com Streams, você pode encadear várias operações em uma única linha de código, o que resulta em um código mais limpo e fácil de ler. Além disso, a API de Stream foi projetada para facilitar o processamento paralelo dos dados, o que pode resultar em um desempenho melhor em certos cenários.
Vamos a um exemplo prático. Suponha que você tenha uma lista de números e queira encontrar a soma dos números pares. Usando as coleções tradicionais, você poderia fazer algo assim:
List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int soma = 0;
for (int numero : numeros) {
if (numero % 2 == 0) {
soma += numero;
}
}
System.out.println(soma); // Imprime: 30
Agora, usando Streams, você poderia fazer o mesmo da seguinte maneira:
List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int soma = numeros.stream()
.filter(numero -> numero % 2 == 0)
.mapToInt(Integer::intValue)
.sum();
System.out.println(soma); // Imprime: 30
Como você pode ver, o código usando Streams é mais conciso e expressa claramente a intenção: filtrar os números pares e somá-los.
Claro, isso não significa que você sempre deve usar Streams em vez de coleções. Ambos têm seus usos e dependem do que você está tentando alcançar. Mas, em muitos casos, especialmente quando você está lidando com grandes conjuntos de dados e precisa realizar várias operações, Streams podem ser uma opção melhor.
Espero ter ajudado e bons estudos!
Entendi. Então no caso os métodos foeach
, filter
que foi introduzido no java 8 seria métodos de stream?
Sim, exatamente! Os métodos forEach, filter e outros que foram introduzidos no Java 8 são métodos da API de Stream. Esses métodos permitem que você realize operações em sequência nos elementos de um fluxo de dados (stream) :)