Sobes.tech
Middle+

Stream-ში რეკურსიის მეთოდი რა არის?

sobes.tech AI

პასუხი AI-სგან

Stream API-ში რეკურსია პირდაპირი მხარდაჭერა არ აქვს. მეთოდი სახელწოდებით reduce.

reduce მეთოდი Stream API-ში ასრულებს ნაკადის ელემენტების შეკუმშვას ერთ შედეგობრივ მნიშვნელობაში, ბინარული ოპერაციის გამოყენებით.

არსებობს სამი გადატვირთვა reduce მეთოდის:

  1. Optional<T> reduce(BinaryOperator<T> accumulator): იყენებს შეკუმშვის ოპერატორს ნაკადის ელემენტებზე და აბრუნებს Optional<T>-ს. გამოიყენება, როდესაც საწყისი მნიშვნელობა არ არის.

  2. T reduce(T identity, BinaryOperator<T> accumulator): იყენებს შეკუმშვის ოპერატორს, დაწყებული მითითებული საწყისი მნიშვნელობით (identity). აბრუნებს შედეგობრივ მნიშვნელობას T ტიპში.

  3. <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner): ყველაზე ზოგადი ფორმა, რომელიც განკუთვნილია პარალელური ნაკადებისთვის.

    • identity: აკუმულატორის საწყისი მნიშვნელობა.
    • accumulator: აერთიანებს ნაკადის ელემენტს და აკუმულატორს.
    • combiner: აერთიანებს პარალელური გამოთვლების შედეგებს.

გამოყენების მაგალითი:

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

        // მაგალითი 1: ელემენტების ჯამი საწყისი მნიშვნელობის გარეშე
        Optional<Integer> sumOptional = numbers.stream()
                                              .reduce((a, b) -> a + b);
        sumOptional.ifPresent(sum -> System.out.println("ჯამი (Optional): " + sum));

        // მაგალითი 2: ელემენტების ჯამი საწყისი მნიშვნელობით
        int sumWithIdentity = numbers.stream()
                                     .reduce(0, (a, b) -> a + b);
        System.out.println("ჯამი (identity-ით): " + sumWithIdentity);

        // მაგალითი 3: ტექსტების გაერთიანება პარალელური ნაკადით
        List<String> words = Arrays.asList("Hello", " ", "World", "!");
        String combinedString = words.parallelStream()
                                     .reduce("", // საწყისი მნიშვნელობა
                                             (a, b) -> a + b, // აკუმულატორი
                                             (a, b) -> a + b); // გამაერთიანებელი
        System.out.println("გაერთიანებული ტექსტი: " + combinedString);
    }
}