logo

Java'da Akış

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ımaktarı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:

  1. Ara İşlemler
  2. Terminal Operasyonları

Ara İşlemler

Java Akışı İşlemleri' title=



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ımharita(İşlevharitacı)

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ımfiltre(Yüklemyüklem)

3. sıralanmış() : Sıralanmış yöntem akışı sıralamak için kullanılır.

Sözdizimi:

Aktarımsıralanmış()
Aktarımsıralanmış(Karşılaştırıcı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ımflatMap(İşlev> 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ımbelirgin()

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ımgöz at(Tüketiciaksiyon)

Tüm ara işlemlerin kullanımını gösteren Java programı:

Java
import 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ı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üketiciaksiyon)

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üklemyü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)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ı:

Java
import 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ış:

AkışlarÇıktı' loading='lazy' title=Çı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