Kotlin Collections 2(Build, Iterator, Filter)

Enes Selçuk
3 min readAug 7, 2022

--

Selamlar :) serimiz olduğu yerden devam ediyor. Kotlin Collections 1. serisinde list, set, map nedir, nasıl kullanılır gibi örnekler vererek açıklamıştım. kotlin collections 1. serisini okumadan 2. serisini okumanızı tavsiye etmiyorum.

Şimdi ise biraz daha derine inmek istiyorum. Hazırsanız başlayalım :)

Kotlinde collections faklı bir şekilde oluşturmanın yollarından biri de build oluşturmak. Yani build ile list, set, map yapabiliriz. Yaptığımız bu işlem de add, remove, update işlemleri de yapabiliriz.

Diğer collections’dan farkı nedir? Şöyle ki buildSet, buildMap, buildList inline functions olarak kullanılıyor yani memoride yer kaplamıyorlar. Inline funitons primitive olarak saklanırlar Class olarak değil. Daha hızlı bir perforans almamızı sağlar.

Aşığıda gördüğünüz örnekde buildList bir yapı var. Body kısmında işlemleri yapabiliriz. Build işlemlerinde sadece body içerisinde add, remove ve update yapabiliriz body’nin dışında herhangi bir değişiklik yapamayız. Bu durumda bu read-only olarak return ediyor. Read-only demek sadece get işlemi yapabiliriz getine ulaşırız üzerinde herhangi bir set işlemi yapamayız.

Aynı şekilde builSet<T> ve buildMap<T> içinde geçerli

Iterators

elementleri göstermeden collections sırayla erişmek için bir iterator objecti(nesne)dir.

Iterators, collections tüm elementleri tek tek işlemler yaptığımızda çok kullanışlı bir yöntemdir.

Iterators, Iterable<T>’ dan implement ediyor. Iterator fonctionu çağırdığımızda List ve Set işlemleri yapabiliriz.

next() operator functionu ile elemetleri tek tek dolaşır ve iteratorun position’nuna göre işlem yapar. Aşağıdaki örnek de bakalım. hasNext bir boolean döndürür ve her next yaptığımızda hasNext devereye giriyor true veya false bir değer döndürüyor. next ile değeri tek tek alıp println() ile yazdırıyoruz.

List Iterator ve Mutable Iterator iki tanecik :) interface var.

nedir bunlar tek tek ele alalım önemli :)

ListIterator<T>

ListIterator<T> özel bir iterator interfacedir. elementleri üzerinde ileri ve geri dolaşır. Yani geriye doğru elementleri sırala bir şekilde kod yazmak istediğimiz de vb. işlemlerimizi yaparız.

ListIerator<T> ovveride functionu hasPrevious() ile elementleri geriye sıralayabiliriz. Örnek üzerinde gidelim.

hasPrevious() functionu true döndürür. Yani önceki elementler iteratorda var ise true döndürür.

previousIndex() ile elementlerde ki indexleri döndürür. Sıfırdan başlar ve geriye doğrı indexler gösterir.

previous() elementin posizyonuna göre iteratorde ki elementleri döndürür.

MutableIterator<T>

MutableIterator, Iterator<T>’dan implement ediyor. MutableIterator<T> sadece remove işlemi yapabilirsiniz.

MutableListIterator<T> interface, MutableIterator<T> ve ListIterator<T>’dan implement ediyor. MutableListIterator<T> ile add, remove, update işlemi yapabiliriz.

MutableIterator ile çalışmak istediğinizde son elementi siler.

MutableListIterator<T> ile kodlara baktığımızda add ve set işlemlerde hep 1. indexten sonra add veya set işlemi yapılıyor. remove ise set veya add yapılan son işlemde değeri remove eder. Koda bakalım.

add ve set işlemi yaptıktan sonra value silmek istiyorsak add veya set işleminin yaptığı value siler.

Filter

Filter, collections üzerinde işlemler yaptığımız önemli bir yapıdır. Peki nasıl çalışıyor?

collections.filter {} şeklinde yazılır. Geri dönüş değeri bir boolean bir ifade döndürür. Hadi Özelliklerine bakalım

  • kodlarımızda filter ile ilgili bir işlem yapmak istediğimizde filter functionu kullanmak için filter() keyworduyla kullanırız.
  • filter positions, index ve value şeklinde kullanmak istediğimizde filterIndexed() kullanırız.
  • Collections içerisinde birden fazla faklı value type var ama biz örneğin sadece bir tane value type işlemini yapmak istiyoruz. Işte hayatımızı kurtaran, kodlarımızı tamamlayan belirli bir collections elementini vermek için filterIsInstance() kullanırız.

--

--