Middle+
O que é o método de recursão em Stream?
sobes.tech IA
Resposta da IA
// A recursão na Stream API não é suportada diretamente.
// O método chama-se reduce.
O método reduce na Stream API realiza uma redução dos elementos do fluxo em um único valor resultante, aplicando uma operação binária.
Existem três sobrecargas do método reduce:
-
Optional<T> reduce(BinaryOperator<T> accumulator): Aplica o operador de redução aos elementos do fluxo, retornando umOptional<T>. É usado quando não há um valor inicial. -
T reduce(T identity, BinaryOperator<T> accumulator): Aplica o operador de redução começando com um valor inicial (identity). Retorna um valor resultante do tipoT. -
<U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner): Forma mais geral, adequada para fluxos paralelos.identity: Valor inicial do acumulador.accumulator: Combina um elemento do fluxo com o acumulador.combiner: Combina os resultados de cálculos paralelos.
Exemplo de uso:
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class StreamReduceExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// Exemplo 1: Soma dos elementos sem valor inicial
Optional<Integer> sumOptional = numbers.stream()
.reduce((a, b) -> a + b);
sumOptional.ifPresent(sum -> System.out.println("Soma (Optional): " + sum));
// Exemplo 2: Soma dos elementos com valor inicial
int sumWithIdentity = numbers.stream()
.reduce(0, (a, b) -> a + b);
System.out.println("Soma (com identidade): " + sumWithIdentity);
// Exemplo 3: Concatenação de strings com fluxo paralelo
List<String> words = Arrays.asList("Hello", " ", "World", "!");
String combinedString = words.parallelStream()
.reduce("", // identidade
(a, b) -> a + b, // acumulador
(a, b) -> a + b); // combinador
System.out.println("String combinada: " + combinedString);
}
}