Sobes.tech
Middle+

Stream'te özyineleme yöntemi nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

// Stream API'de özyineleme doğrudan desteklenmez.  
// Metodun adı reduce'dir.  

Stream API'deki reduce metodu, akıştaki öğeleri tek bir sonuç değeri haline getirmek için ikili bir işlem uygular.

reduce metodunun üç aşırı yüklemesi vardır:

  1. Optional<T> reduce(BinaryOperator<T> accumulator): Akıştaki öğelere bir azaltma operatörü uygular ve bir Optional<T> döner. Başlangıç değeri olmadığında kullanılır.

  2. T reduce(T identity, BinaryOperator<T> accumulator): Belirtilen başlangıç değeri (identity) ile azaltma operatörünü uygular. Sonuç T türünde olur.

  3. <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner): En genel formdur, paralel akışlar için uygundur.

    • identity: Akümülatorun başlangıç değeri.
    • accumulator: Bir akış öğesini akümülator ile birleştirir.
    • combiner: Paralel hesaplamaların sonuçlarını birleştirir.

Kullanım örneği:

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

        // Örnek 1: Başlangıç değeri olmadan toplam  
        Optional<Integer> sumOptional = numbers.stream()  
                                              .reduce((a, b) -> a + b);  
        sumOptional.ifPresent(sum -> System.out.println("Toplam (Optional): " + sum));  

        // Örnek 2: Başlangıç değeri ile toplam  
        int sumWithIdentity = numbers.stream()  
                                     .reduce(0, (a, b) -> a + b);  
        System.out.println("Toplam (identity ile): " + sumWithIdentity);  

        // Örnek 3: Paralel akış ile stringleri birleştirme  
        List<String> words = Arrays.asList("Hello", " ", "World", "!");  
        String combinedString = words.parallelStream()  
                                     .reduce("", // başlangıç değeri  
                                             (a, b) -> a + b, // akümülator  
                                             (a, b) -> a + b); // birleştirici  
        System.out.println("Birleştirilmiş string: " + combinedString);  
    }  
}