Sobes.tech
Middle+

Kas yra rekursijos metodas Stream?

sobes.tech AI

Atsakymas iš AI

Stream API tiesiogiai rekursijos nepalaiko. Metodas vadinamas reduce.

reduce metodas Stream API atlieka srautų elementų susiliejimą į vieną galutinę reikšmę, taikant binarinę operaciją.

Yra trys reduce metodo perkrovos:

  1. Optional<T> reduce(BinaryOperator<T> accumulator): Taiko susiliejimo operatorių į srauto elementus ir grąžina Optional<T>. Naudojama, kai nėra pradinės reikšmės.

  2. T reduce(T identity, BinaryOperator<T> accumulator): Taiko susiliejimo operatorių, pradedant nuo nurodytos pradinės reikšmės (identity). Grąžina galutinę reikšmę T tipą.

  3. <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner): Labiausiai bendroji forma, tinkama paraleliniams srautams.

    • identity: Akumuliatoriaus pradinė reikšmė.
    • accumulator: Sujungia srauto elementą su akumuliatoriumi.
    • combiner: Sujungia paralelinių skaičiavimų rezultatus.

Pavyzdys naudojimo:

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);

        // Pavyzdys 1: Elementų suma be pradinės reikšmės
        Optional<Integer> sumOptional = numbers.stream()
                                              .reduce((a, b) -> a + b);
        sumOptional.ifPresent(sum -> System.out.println("Suma (Optional): " + sum));

        // Pavyzdys 2: Elementų suma su pradiniu reikšme
        int sumWithIdentity = numbers.stream()
                                     .reduce(0, (a, b) -> a + b);
        System.out.println("Suma (su identity): " + sumWithIdentity);

        // Pavyzdys 3: Tekstų sujungimas paraleliniu srautu
        List<String> words = Arrays.asList("Hello", " ", "World", "!");
        String combinedString = words.parallelStream()
                                     .reduce("", // pradinė reikšmė
                                             (a, b) -> a + b, // akumuliatorius
                                             (a, b) -> a + b); // sujungėjas
        System.out.println("Sujungtas tekstas: " + combinedString);
    }
}