Kişisel web sayfamda yazılım, teknoloji ve genel hayat hakkında paylaşımlar yapmayı hedefliyorum.

Kotlin Programlama Dersleri – Collections 2 – Collection Operations

Merhaba, bu yazı önceki yazımda bahsettiğim Collections konusunun devamı niteliğinde olacak. Bu yüzden ilk yazıyı okumanızı kesinlikle tavsiye ederim.

Collectionlardan ve özelliklerinden bahsedip standard library içinde bulunan operationlardan bahsetmemek olmazdı. Özellikle Kotlinin extension ve higher order fonksiyonlarıyla zenginleşen bu işlemlerin bazıları member (üye) function; bazıları extension functionlardır.

Hem read – only hem mutable collectionlar için kullanılan işlemleri Common Operations başlığında toplayabiliriz. Bunları:

  • Transformations
  • Filtering
  • Plus and Minus Operations
  • Grouping
  • Retrieving Collection Parts
  • Retrieving Single Elements
  • Ordering
  • Aggregate Operations

olarak gruplandırabiliriz.

Transformations

Kotlin standard libraryde koleksiyonların dönüşümü için hazırlanmış birçok extension function bulunur. Fonksiyonlar, belirtilen kurala göre yeni bir koleksiyon geri döner.

Mapping

Temel mapping fonksiyonu map() . Bir koleksiyonun sonuçlarından, verilen lambda ifadesini her elemana uygulayarak yeni bir koleksiyon oluşturur. Bu fonksiyon orjinal koleksiyon sırasını değiştirmez. Eğer indexlere ihtiyacımız varsa, mapIndexed() fonksiyonu devreye giriyor.

Eğer map işlemi sonrasında null değerleri elemek istersek, mapNotNull() veya mapNotNullIndexed() fonksiyonlarını kullanabiliriz.

Map tipli collectionlarda mapKeys() ve mapValues() fonksiyonları ile key veya value ile ilgili işlemler yapabilirsiniz.

Zipping

İki farklı collectionı birleştirmek istersek, zip() fonksiyonu karşımıza çıkıyor. Collectionların boyutları aynı değilse; zip fonskiyonu küçük collectiona göre çalışıyor. Ve geriye list of pair dönüyor.

Bir list of pairi unzip() fonksiyonu ile iki collectiona çevirebiliriz. Bu işlemde ilk liste birinci elemanlardan; ikinci liste ikinci elemanlardan oluşur.

Association

Mevcut collection elemanlarını belirtilen değerler ile ilişkilendirip bir map oluşturur. keySelector ile key; valueSelector ile value değerleri manipule edilebilir.

Flattening

İç içe collectionlarla çalıştığımız durumlarda collectionları tek bir liste olarak almak için flatten() fonksiyonu kullanabiliriz. Daha özgür bir kullanım için flatMap() fonksiyonu da bizim için standard library içinde bulunmakta.

String Representation

Eğer collectionları string formatında elde etmek istersek karşımıza joinTo() ve joinToString() fonksiyonları çıkıyor. Ek olarak, özellikle uzun collectionlarda belirli bir sınıra kadar gösterim yapmak için limit ve truncated parametrelerini kullanabiliriz.

Filtering

Collectionlarda en çok kullanılan işlemlerden biri olan filtreleme, Kotlin dilinde bir prediction, ifade üzerinden gerçekleşir. Standard Library içindeki fonksiyonların çoğu, orjinal collection üzerinde değişiklik yapmaz. Filtreleme sonuçlarını almak için bir değişkene atayabiliriz ya da zincirleme işlemler yapabiliriz.

Filtreleme işlemi sonrası listeler ve setler list dönerken; mapler map döner.
Eğer:
-> verilen kuralın tersini isterseniz filterNot() fonksiyonunu,
-> indexlerle işiniz varsa filterIndexed() fonksiyonunu,
-> null değerleri istemiyorsanız filterNotNull() fonksiyonunu,
-> verilerin tipi ile çalışmak isterseniz filterInstance() fonksiyonunu kullanabilirsiniz.

Peki ben filtreleme yapacağım ama bana iki taraf da lazım diyorsanız karşınıza partition çıkıyor. Partition ile verilen kurala uyan ve uymayan olmak üzere iki farklı liste elde ederiz.

Peki ben filtreleyip atmak istemiyorum tüm collectionı kontrol etmek istiyorum diyorsanız eğer;

  • any(), verilen koşula uyan en az 1 eleman varsa true döner.
  • none(), verilen koşula uygun eleman yoksa true döner.
  • all(), elemanların tümü verilen koşulu sağlarsa true döner. Bu fonksiyonda boş listede de true değeri elde ederiz. (Sebep)

Grouping

Standard Library bizlere gruplama işlemleri için de yardımcı oluyor. groupBy() ile collectionları verdiğimiz lambda ifadeye göre gruplayıp geri dönüş tipi olarak map elde edebiliriz. Eğer bu fonksiyonun sonuçlar için de istediğimiz şeyleri yapmasını istersek ikinci bir parametre olarak gerekli fonksiyonu verebiliriz.

Eğer tüm gruplara işlem yapmak istiyorsanız groupingBy() işinizi görecektir. Geriye grouping tipinde bir değer döner.

Grouping, verilen işlemleri tüm gruplara lazy biçimde uygular. Gruplar verilen işlemin gerçekleşeceği anda oluşturulur.

Retrieving Collection Parts

Collection içinden (konuma göre, sonuç sayısı belirterek, boyuta göre) verileri almak istediğimizde kullanacağımız birkaç fonksiyon vardır.

Slice

İstediğimiz aralıkta değerleri almak için slice() fonksiyonunu kullanabiliriz. Parametre olarak int range ya da collection verilebilir.

Take and Drop

Collection içinden istediğiniz miktarda veri almak isterseniz take fonksiyonlarını kullanabilirsiniz.

Eğer istediğimiz yerden ya da istediğimiz sayıda elemanları kaldırmak istersek drop fonksiyonlarını kullanabiliriz.

Chunked

Elimizdeki collectionı küçük eş parçalara ayırmamıza yarayan bir fonksiyonumuz var. chunked() fonksiyonu parça boyutunu parametre alır ve son parçayı eksik verebilir.

Eğer koleksiyonda verdiğimiz aralığın tüm olasılıklarını almak istersek de windowed() devreye giriyor.

Retrieving Single Elements

Mevcut koleksiyondan parçalar alabileceğimiz gibi tek elemanlar da alabiliriz. Konuma göre, şarta göre ya da rastgele elemanları alabiliriz.

Ordering

Kotlinde sıralama işlemini mevcut fonksiyonlarla yapabileceğimiz gibi; Comparable interfacesi ile özel sıralama fonksiyonumuzu da yazabiliriz. Kotlinde birçok karşılaştırma yöntemi (by comparator, user-defined comparable object, natural) bulunmaktadır.

Aggregate Operations

Birçok dilde bulunan, min, max, sum gibi genel fonksiyonlar Kotlinde de bulunur. Bunlara ek olarak fold ve reduce fonksiyonları da özel senaryolarda işleri oldukça kolaylaştırır.

Set Specific Operations

Kotlinde setler arasındaki farkı, kesişimi bulmak ya da iki seti birleştirmek için de fonksiyonlar bulunur.

Aslında bu işlemler listeler tarafından da desteklenir fakat geri dönüş tipi set olduğu için çift veriler teke düşürülür.

Evet bu yazı biraz uzun oldu ama faydalı olacağından şüphem yok. Bu yazıda değinmediğim birçok detay olabilir, daha fazlası ve kaynak için her zamanki gibi Kotlin Dökümanına gidebilirsiniz. Video kaynak isteyenleri de şöyle alalım –> Halil Özcan – Collections
Öte yandan hatalı bir nokta olduğunu düşünüyorsanız belirtmekten asla çekinmeyin.(Yorumlar ya da iletişim kısmı)
Sağlıcakla kalın, sonraki yazıda görüşmek üzere…

Share

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir