Akış şu tarihte tanıtıldı: Java 8 Stream API, nesne koleksiyonlarını işlemek için kullanılır. Java'daki bir akış, istenen sonucu elde etmek için ardışık düzen oluşturulabilecek çeşitli yöntemleri destekleyen bir nesneler dizisidir.
Java'da Stream Kullanımı
Stream'in Java'daki kullanımları aşağıda belirtilmiştir:
- Stream API, nesne koleksiyonlarını ifade etmenin ve işlemenin bir yoludur.
- Filtreleme, haritalama, azaltma, sıralama gibi işlemleri yapabilmemizi sağlayın.
Java Akışı Nasıl Oluşturulur
Java Stream Oluşturma, Java Stream'in işlevlerini dikkate almadan önce atılması gereken en temel adımlardan biridir. Aşağıda bir Java Akışı bildirmek için verilen sözdizimi verilmiştir.
Java'daki arayüz
Sözdizimi
Aktarım
aktarım;
Burada T, bildirime bağlı olarak bir sınıf nesnesi veya veri türüdür.
Java Akışı Özellikleri
Java akışlarının özellikleri aşağıda belirtilmiştir:
- Akış bir veri yapısı değildir; yalnızca Koleksiyon Dizilerinden veya G/Ç kanallarından girdi alır.
- Akışlar orijinal verileri değiştirmez; sadece kendi yöntemlerini kullanarak sonuç üretirler.
- Ara işlemler (filtre haritası vb. gibi) tembeldir ve başka bir Akış döndürür, böylece bunları birbirine zincirleyebilirsiniz.
- Bir terminal işlemi (Her sayım için toplama gibi) akışı sonlandırır ve nihai sonucu verir.
Akışlarda Farklı İşlemler
Akışlarda iki tür İşlem vardır:
- Ara İşlemler
- Terminal Operasyonları
Ara İşlemler

Ara İşlemler, birden fazla yöntemin arka arkaya zincirlendiği işlem türleridir.
Ara İşlemlerin Özellikleri
- Yöntemler birbirine zincirlenmiştir.
- Ara işlemler bir akışı başka bir akışa dönüştürür.
- Bir yöntemin verileri filtrelediği ve işlendikten sonra başka bir yönteme aktardığı filtreleme kavramını sağlar.
Önemli Ara Operasyonlar
Aşağıda belirtilen birkaç Ara Operasyon vardır:
1. harita() : Harita yöntemi, verilen fonksiyonun bu akışın elemanlarına uygulanmasının sonuçlarından oluşan bir akışı döndürmek için kullanılır.
Sözdizimi:
Aktarım harita(İşlev super T ? extends R>haritacı)
2. filtre() : Filtre yöntemi, bağımsız değişken olarak iletilen Yükleme göre öğeleri seçmek için kullanılır.
Sözdizimi:
Aktarım
filtre(Yüklem super T>yüklem)
3. sıralanmış() : Sıralanmış yöntem akışı sıralamak için kullanılır.
Sözdizimi:
Aktarım
sıralanmış()
Aktarımsıralanmış(Karşılaştırıcı super T>karşılaştırıcı)
4. düz Harita(): Java Streams'teki flatMap işlemi, bir koleksiyon akışını tek bir öğe akışına düzleştirmek için kullanılır.
Sözdizimi:
Aktarım flatMap(İşlev super T ? extends Stream extends R>> haritalayıcı)
5. farklı() : Yinelenen öğeleri kaldırır. Farklı öğelerden oluşan bir akış döndürür (Object.equals(Object)'e göre).
Sözdizimi:
Aktarım
belirgin()
6. göz at() : Akışı değiştirmeden her öğe üzerinde bir eylem gerçekleştirir. Bu akışın öğelerinden oluşan bir akışı döndürür, ayrıca elde edilen akıştan öğeler tüketildikçe her öğe üzerinde sağlanan eylemi gerçekleştirir.
Sözdizimi:
Aktarım
göz at(Tüketici super T>aksiyon)
Tüm ara işlemlerin kullanımını gösteren Java programı:
Javaimport java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class StreamIntermediateOperationsExample { public static void main(String[] args) { // List of lists of names List<List<String>> listOfLists = Arrays.asList( Arrays.asList('Reflection' 'Collection' 'Stream') Arrays.asList('Structure' 'State' 'Flow') Arrays.asList('Sorting' 'Mapping' 'Reduction' 'Stream') ); // Create a set to hold intermediate results Set<String> intermediateResults = new HashSet<>(); // Stream pipeline demonstrating various intermediate operations List<String> result = listOfLists.stream() .flatMap(List::stream) .filter(s -> s.startsWith('S')) .map(String::toUpperCase) .distinct() .sorted() .peek(s -> intermediateResults.add(s)) .collect(Collectors.toList()); // Print the intermediate results System.out.println('Intermediate Results:'); intermediateResults.forEach(System.out::println); // Print the final result System.out.println('Final Result:'); result.forEach(System.out::println); } }
Çıkış
Intermediate Results: STRUCTURE STREAM STATE SORTING Final Result: SORTING STATE STREAM STRUCTURE
Açıklama:
- listOfLists, diğer dize listelerini içeren bir liste olarak oluşturulur.
- flatMap(Liste::akış): İç içe geçmiş listeleri tek bir dize akışı halinde düzleştirir.
- filtre(ler) -> s.startsWith('S')) : Dizeleri yalnızca 'S' ile başlayanları içerecek şekilde filtreler.
- harita(String::toUpperCase) : Akıştaki her dizeyi büyük harfe dönüştürür.
- belirgin() : Yinelenen dizeleri kaldırır.
- sıralanmış() : Ortaya çıkan dizeleri alfabetik olarak sıralar.
- göz at(...): İşlenen her öğeyi ara inceleme için ara Sonuçlar kümesine ekler.
- toplamak(Collectors.toList()): Son işlenen dizeleri sonuç adı verilen bir listede toplar.
Program, araSonuçlar kümesinde saklanan ara sonuçları yazdırır. Son olarak, tüm akış işlemlerinden sonra tamamen işlenmiş dizeleri içeren sonuç listesini yazdırır.
Terminal Operasyonları
Terminal İşlemleri, sonucu döndüren İşlem türüdür. Bu İşlemler daha fazla işlenmez, yalnızca nihai sonuç değerini döndürür.
Önemli Terminal Operasyonları
1.topla() : Collect yöntemi, akış üzerinde gerçekleştirilen ara işlemlerin sonucunu döndürmek için kullanılır.
Sözdizimi:
R topla(Toplayıcı super T A R>kolektör)
2. Her biri için() : forEach yöntemi, akışın her öğesi boyunca yineleme yapmak için kullanılır.
java'da string'den int'ye dönüşüm
Sözdizimi:
void forEach(Tüketici super T>aksiyon)
3. azalt(): Reduce yöntemi bir akışın elemanlarını tek bir değere indirgemek için kullanılır. Reduce yöntemi parametre olarak BinaryOperator'ı alır.
Sözdizimi:
T azalt(T kimliği İkiliİşleç
akümülatör)
İsteğe bağlıazalt(İkiliİşleç akümülatör)
4. sayım() : Akıştaki öğelerin sayısını döndürür.
Sözdizimi:
uzun sayım()
5.FindFirst() : Varsa akışın ilk öğesini döndürür.
Sözdizimi:
İsteğe bağlı
ilk bul() çoklu tablo sql'yi seçin
6. allMatch() : Akışın tüm öğelerinin belirli bir yüklemle eşleşip eşleşmediğini kontrol eder.
Sözdizimi:
boolean allMatch(Yüklem super T>yüklem)
7. Herhangi bir eşleşme () : Akışın herhangi bir öğesinin belirli bir yüklemle eşleşip eşleşmediğini kontrol eder.
Sözdizimi:
Boolean Anymatch (Yüküm) super T>yüklem)
Burada bir değişkene başlangıç değeri olarak 0 atanır ve buna i eklenir.
Not: Ara İşlemler, bir sonraki yönteme geçmeden önce her yöntemin sabit bir değer (Terminal işlemi) döndürmesini sağlayan Tembel Değerlendirme konseptine dayalı olarak çalışır.
Tüm Terminal İşlemlerini Kullanan Java Programı:
Javaimport java.util.*; import java.util.stream.Collectors; public class StreamTerminalOperationsExample { public static void main(String[] args) { // Sample data List<String> names = Arrays.asList( 'Reflection' 'Collection' 'Stream' 'Structure' 'Sorting' 'State' ); // forEach: Print each name System.out.println('forEach:'); names.stream().forEach(System.out::println); // collect: Collect names starting with 'S' into a list List<String> sNames = names.stream() .filter(name -> name.startsWith('S')) .collect(Collectors.toList()); System.out.println('ncollect (names starting with 'S'):'); sNames.forEach(System.out::println); // reduce: Concatenate all names into a single string String concatenatedNames = names.stream().reduce( '' (partialString element) -> partialString + ' ' + element ); System.out.println('nreduce (concatenated names):'); System.out.println(concatenatedNames.trim()); // count: Count the number of names long count = names.stream().count(); System.out.println('ncount:'); System.out.println(count); // findFirst: Find the first name Optional<String> firstName = names.stream().findFirst(); System.out.println('nfindFirst:'); firstName.ifPresent(System.out::println); // allMatch: Check if all names start with 'S' boolean allStartWithS = names.stream().allMatch( name -> name.startsWith('S') ); System.out.println('nallMatch (all start with 'S'):'); System.out.println(allStartWithS); // anyMatch: Check if any name starts with 'S' boolean anyStartWithS = names.stream().anyMatch( name -> name.startsWith('S') ); System.out.println('nanyMatch (any start with 'S'):'); System.out.println(anyStartWithS); } }
Çıkış:
ÇıkışAçıklama:
- Ad listesi örnek dizelerle oluşturulur.
- Her biri için: Listedeki her adı yazdırır.
- TOPLAMAK : 'S' ile başlayan adları filtreler ve yeni bir listede toplar.
- azaltmak : Tüm adları tek bir dizede birleştirir.
- saymak : Toplam ad sayısını sayar.
- İlk Bul : Listedeki ilk adı bulur ve yazdırır.
- hepsiEşleşme : Tüm adların 'S' ile başlayıp başlamadığını kontrol eder.
- şanssız : Herhangi bir ismin 'S' ile başlayıp başlamadığını kontrol eder.
Program, her ismin 'S' ile başlayan adlarını birleştirilmiş adları ad sayısını, ilk adı tüm adların 'S' ile başlayıp başlamadığını ve herhangi bir adın 'S' ile başlayıp başlamadığını yazdırır.
Java Stream'in Faydaları
Aşağıda belirtildiği gibi Java'da Stream kullanmamızın bazı avantajları vardır:
- Depolama Yok
- Fonksiyonların Boru Hattı
- Tembellik
- Sonsuz olabilir
- Paralelleştirilebilir
- Stream IntStream vb.'deki koleksiyon dizilerinden Dosyalar Satır Yöntemleri oluşturulabilir.
Java Akışlarının Gerçek Dünyadaki Kullanım Durumları
Akışlar, modern Java uygulamalarında aşağıdaki amaçlarla yaygın olarak kullanılır:
- Veri İşleme
- JSON/XML yanıtlarını işlemek için
- Veritabanı İşlemleri için
- Eşzamanlı İşleme