Middle
Java'nın yeni sürümünde neden akışlar kullanılıyor?
sobes.tech yapay zeka
AI'dan gelen yanıt
Java'nın yeni sürümlerinde (Java 8 ve sonrası) stream'lerin kullanımı, verimlilik, kod okunabilirliği ve veri işleme paralelliği ile ilgili birkaç nedene dayanmaktadır:
- Fonksiyonel programlama: Stream'ler, verilerle ne yapılması gerektiğine odaklanan, daha deklaratif bir tarzda kod yazmayı sağlar, nasıl değil. Bu, okunabilirliği ve bakımı artırır.
- Paralel işlem: Stream'ler,
parallelStream()kullanarak koleksiyonlar üzerinde işlemleri kolayca paralelleştirmeye olanak tanır. JVM, verilerin bölünmesini ve sonuçların birleştirilmesini yönetir, çok iş parçacıklı uygulamaların geliştirilmesini basitleştirir. - Verimlilik: Stream'lerde tembel değerlendirme (lazy evaluation) kullanılır, bu da işlemlerin yalnızca gerektiğinde yürütüleceği anlamına gelir ve ek maliyetleri azaltır. Ara işlemler (map, filter) hemen yürütülmez, terminal işlemi (collect, forEach) çağrılana kadar.
- Koleksiyonların geliştirilmiş işlenmesi: Filtreleme, dönüştürme ve toplama gibi standart ve yüksek seviyeli işlemler sağlar, bu da döngülerle yazılan kod miktarını azaltır.
- Değiştirilmez işlemler: Stream'ler, oluşturuldukları orijinal koleksiyonu değiştirmez, immutability ilkelerini destekler ve hata ayıklamayı kolaylaştırır.
// Stream kullanımıyla filtreleme ve dönüştürme örneği
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream() // Stream oluşturma
.filter(name -> name.startsWith("C")) // Filtreleme
.map(String::toUpperCase) // Dönüştürme
.collect(Collectors.toList()); // Yeni listeye toplama
System.out.println(filteredNames); // Çıktı: [CHARLIE]
Paralel stream'ler:
// Paralel işlem örneği
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = numbers.parallelStream() // Paralel stream oluşturma
.mapToInt(Integer::intValue) // IntStream'e dönüştürme
.sum(); // Toplama
System.out.println(sum); // Çıktı: 55 (çok çekirdekli sistemlerde daha hızlı hesaplanabilir)