Java Stream API Nedir ve Nasıl Kullanılır?
Stream API, Java koleksiyonları üzerinde çeÅŸitli veri iÅŸleme operasyonları yapabilmenizi saÄŸlayan bir araçtır. Bu operasyonlar filtreleme, sıralama, eÅŸleme ve biriktirme gibi iÅŸlevlerden oluÅŸur. Stream API’nin en büyük avantajlarından biri, iÅŸlem zincirleri oluÅŸturarak verileri daha kolay ve okunabilir bir ÅŸekilde iÅŸleyebilmenizdir.
Stream API Kullanımı ve Özellikler
Stream API kullanarak şunları yapabilirsiniz:
- Veri akışları üzerinde filtreleme:
filter()
metodu ile belirli kriterlere uyan elemanları seçebilirsiniz. - Dönüştürme:
map()
metodu kullanarak her bir elemanı farklı bir tipe veya değere dönüştürebilirsiniz. - Sıralama:
sorted()
metodu ile veri akışını belirli bir düzene göre sıralayabilirsiniz. - Biriktirme (Collecting):
collect()
metodu ile stream sonuçlarını listeye, sete veya başka bir koleksiyona dönüştürebilirsiniz.
Örneğin, bir listeyi filtreleyip sıralayıp yazdırmak oldukça basittir:
List<String> names = Arrays.asList("Ali", "AyÅŸe", "Zeynep", "Mehmet", "Burak");
names.stream()
.filter(name -> name.startsWith("A"))
.sorted()
.forEach(System.out::println);
Yukarıdaki örnekte, isim listemizi “A” harfi ile baÅŸlayanları filtreleyip, alfabetik sıraya göre sıralayıp ardından ekrana yazdırıyoruz. Bu kodun kısa ve etkili olması, Stream API’nin gücünü gösteriyor.
Ekstra Kod Örnekleri
1) Veri Akışında Sayısal Değerleri Filtreleme ve Toplama
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sumOfEvenNumbers = numbers.stream()
.filter(num -> num % 2 == 0)
.mapToInt(Integer::intValue)
.sum();
System.out.println("Çift sayıların toplamı: " + sumOfEvenNumbers);
Bu örnekte, çift sayıları filtreleyip toplamını buluyoruz. Stream API sayesinde bu tür işlemler oldukça basit hale geliyor.
2) Veri Akışındaki Elemanları Dönüştürme ve Biriktirme
List<String> cities = Arrays.asList("Ankara", "Ä°stanbul", "Ä°zmir", "Bursa");
List<String> uppercaseCities = cities.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(uppercaseCities);
Bu örnekte, şehir isimlerini büyük harfe çevirip sonuçları bir listeye topluyoruz. map()
metodu kullanarak her bir elemanı dönüştürdük ve ardından collect()
ile bir listeye dönüştürdük.
3) Veri Akışında Belirli Kriterlere Göre Gruplama
List<String> fruits = Arrays.asList("Elma", "Armut", "Çilek", "Erik", "Muz", "Ananas");
Map<Character, List<String>> groupedFruits = fruits.stream()
.collect(Collectors.groupingBy(fruit -> fruit.charAt(0)));
groupedFruits.forEach((key, value) -> {
System.out.println(key + ": " + value);
});
Bu örnekte, meyveleri ilk harflerine göre grupluyoruz. Stream API’nin Collectors.groupingBy()
fonksiyonu sayesinde verileri oldukça kolay bir şekilde gruplamak mümkün.
Stream API’de Zincirleme Ä°ÅŸlemler
Stream API’nin en güçlü özelliklerinden biri, iÅŸlemleri zincirleyebilme yeteneÄŸidir. Bu özellik, birçok iÅŸlemi tek satırda bir araya getirerek karmaşık veri iÅŸleme görevlerini daha sade hale getirir.
List<String> countries = Arrays.asList("Türkiye", "Almanya", "Fransa", "İtalya", "İspanya");
countries.stream()
.filter(country -> country.length() > 6)
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
Yukarıdaki örnekte:
- UzunluÄŸu 6’dan büyük olan ülkeleri filtreledik.
- Sonuçları büyük harfe çevirdik.
- Ülkeleri alfabetik sıraya dizdik.
- Sonuçları ekrana yazdırdık.
Bu tür zincirleme işlemler, kodun daha okunabilir ve bakımı kolay hale gelmesini sağlar.
Bölüm 1’de, Java Stream API’nin ne olduÄŸunu ve temel kullanım örneklerini ele aldık. Stream API ile çalışırken filtreleme, dönüştürme, sıralama ve biriktirme gibi iÅŸlemleri nasıl yapabileceÄŸimizi gördük. Bir sonraki bölümde, fonksiyonel programlamayı ve lambda ifadelerini daha detaylı ele alacağız.