Middle
Por que é que os streams são utilizados na nova versão do Java?
sobes.tech IA
Resposta da IA
A utilização de streams nas versões mais recentes do Java (a partir do Java 8) deve-se a várias razões relacionadas com eficiência, legibilidade do código e processamento paralelo de dados:
- Programação funcional: Os streams permitem escrever código de forma mais declarativa, focando no quê fazer com os dados, em vez de como. Isto melhora a legibilidade e a manutenção.
- Processamento paralelo: Os streams facilitam a paralelização de operações em coleções usando
parallelStream(). A JVM gere a divisão dos dados e a junção dos resultados, simplificando o desenvolvimento de aplicações multithread. - Eficiência: A avaliação preguiçosa (lazy evaluation) nos streams significa que as operações só são executadas quando necessário, o que reduz os custos. As operações intermédias (map, filter) não são executadas imediatamente até à chamada de uma operação terminal (collect, forEach).
- Melhor processamento de coleções: Fornecem um conjunto de operações padrão e de alto nível para filtrar, mapear e agregar dados em coleções, o que reduz a quantidade de código repetitivo com loops.
- Operações imutáveis: Os streams não modificam a coleção original de onde são criados, mantendo os princípios de imutabilidade e facilitando a depuração.
// Exemplo de uso de streams para filtrar e mapear
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream() // Criar stream
.filter(name -> name.startsWith("C")) // Filtrar
.map(String::toUpperCase) // Mapear
.collect(Collectors.toList()); // Recolher numa nova lista
System.out.println(filteredNames); // Saída: [CHARLIE]
Streams paralelos:
// Exemplo de processamento paralelo num stream
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = numbers.parallelStream() // Criar stream paralelo
.mapToInt(Integer::intValue) // Converter para IntStream
.sum(); // Soma
System.out.println(sum); // Saída: 55 (pode ser calculado mais rapidamente em sistemas multinúcleo)