Java 8 Stream API Nedir? Kullanım Örneği
Java 8 ile gelen ve oldukça sık kullanılan Stream API özelliğini örnekler vererek açıklamaya çalışacağım. Stream API ile yığınsal veriler üzerinde kolayca işlemlerimizi yapabilme özelliği gelmiştir. Yığınsal veriden kastettiğim Collectionlar, diziler vs… dir.
Elimizde bir dizi var o dizi içerisinden bazı verileri kriterlere göre bulmamız ayırmamız istendiğinde hemen bir döngü içerisine koyup geçici ayrı bir liste oluşturup karşılaştırma işlemlerini yapmışsınızdır muhakkak. Bu ve bunun gibi bir çok işlemi tek ya da 2 satırda halledebilmekteyiz.
Kısa kısa örnekler üzerinde Stream API sayesinde gelen özelliklere bakalım.
- Dizi içerisindeki verileri döngüye alarak işlem yaptırmak çok basit.
Arrays.asList("burak","kutbay","java").stream().forEach(System.out::println); //burak //kutbay //java
- Sıralama işlemlerini yapabiliriz. Sıralama işlemlerini yapmak için yine Java 8 ile gelen Lambda Expressions özelliklerinden yararlanıyoruz. (Lambda expressions bloga yazılacak)
List result = list.stream().sorted((o1, o2)->o1.getItem().getValue(). compareTo(o2.getItem().getValue())). collect(Collectors.toList());
- Filtreleme işlemleri yapabilmekteyiz. Bu sayede dizi içerisindeki verileri belirlediğimiz kriterlere göre basitçe ayırabiliyoruz.
List<String> degerler = Arrays.asList("burak", "kutbay", "java"); List<String> sonuc= degerler.stream() .filter(degerler-> !"java".equals(degerler)) .collect(Collectors.toList()); sonuc.stream(forEach)(System.out::print)) //burakkutbay
Yukarıda yaptığımız işlem “java” değerini ayırıp diğer değerleri başka bir diziye kaydettik.
- Filtre kullanımına başka bir örnek verelim. Personel listesinden adı B ile başlayan 5 adet kişiyi alalım. Filter ile kolayca yapabilmekteyiz.
List<String> secilenpersonel = personel.stream() .map(Personel::getAd) .filter(ad->ad.startsWith("B")) .limit(5) .collect(Collectors.toList());
- Hesaplama işlemi de yaptırabiliriz. Map içerisindeki elemanlara karşılık gelen ilgili değerleri işlemler yaptırabilir ve sıralayabiliriz.
List<Integer> sayi= Arrays.asList(5,2,7,1); List<Integer> toplananSayi= sayi.stream().map( i -> i+2).distinct().collect(Collectors.toList());
- Filtre işlemlerinde gördüğümüz limit belirleme özelliğine bakalım.
Random random = new Random(); random.ints().limit(5).forEach(System.out::println);
Elinize sağlık, giriş için güzel bilgiler yer alıyor. 🙂