DEV Community

Streams Paralelas

Quando usar parallelStream()?

Se você precisar processar grandes quantidades de dados de forma eficiente, pode usar parallelStream() para executar as operações em múltiplas threads.

Certifique-se de que a operação realizada em paralelo seja "associativa" e "comutativa", ou seja, a ordem não deve afetar o resultado final.

Benefícios e cuidados

  • Pode acelerar processamento de grandes volumes de dados.

  • Não é recomendável para coleções pequenas.

  • Pode introduzir problemas com concorrência.

Exemplo 1: Somar números de uma lista.
List<Integer> numeros = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int soma = numeros.parallelStream()
.reduce(0, Integer::sum);
System.out.println("Soma com parallelStream: " + soma);

Exemplo 2: Filtrando e processando elementos com Stream paralelo.
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Usando Stream paralelo para filtrar os números pares e multiplicá-los por 2
List<Integer> result = numbers.parallelStream()
.filter(n -> n % 2 == 0) // Filtra os números pares
.map(n -> n * 2) // Multiplica por 2
.collect(Collectors.toList());
System.out.println("Resultado: " + result);

Exemplo3: Usando reduce com Stream paralelo
//Usando reduce em paralelo para encontrar o maior número
Optional<Integer> max = numbers.parallelStream()
.reduce(Integer::max); // Usa max para encontrar o maior valor
max.ifPresent(System.out::println); // Imprime o maior número

Exemplo 4: Paralelizando a contagem de elementos
List<String> words = List.of("apple", "banana", "cherry", "date", "elderberry");
// Contando o número de palavras com mais de 5 letras
long count = words.parallelStream()
.filter(word -> word.length() > 5)
.count();
System.out.println("Número de palavras com mais de 5 letras: " + count);

Top comments (0)