CodeBlanks Logo Icon CodeBlanks

Arama ve filtreleme

Koleksiyon metotlarıyla arama ve filtreleme yazarsın.

Arama ve filtreleme

Bir kütüphanede binlerce kitap olabilir; belirli bir yazarın kitaplarını bulmak için filter kullanılır. fun searchByAuthor(author: String): List<Book> = books.filter { it.author == author } satırı yazarı eşleşen kitaplardan yeni bir liste üretir.

Uygun kitapları listelemek için ödünç verilmemiş olanları seçmek gerekir: fun availableBooks(): List<Book> = books.filter { it.isbn !in borrowed }. Burada !in operatörü anahtarın haritada olmadığını denetler. Böylece ödünçte olmayan kitapları tek satırda filtreleyebilirsin.

availableBooks ve !in

Ödünç verilmemiş kitapları bulmak için !in operatörü kullanılır. it.isbn !in borrowed ifadesi kitap numarasının borrowed haritasında anahtar olarak bulunmadığını denetler.

Metot tanımı: fun availableBooks(): List<Book> = books.filter { it.isbn !in borrowed }. Bu, yalnızca rafta olan kitapların listesini verir. searchByAuthor ve availableBooks birlikte kullanılabilir: önce yazara göre ara, sonra aralarından uygun olanları seç. Her ikisi de yeni liste döndürdüğü için orijinal books değişmez.

Uygulama searchByAuthor ve availableBooks ekle

Library sınıfına fun searchByAuthor(author: String): List<Book> = books.filter { it.author == author } ekle. Ayrıca fun availableBooks(): List<Book> = books.filter { it.isbn !in borrowed } ekle. main içine iki Dostoyevski kitabı ekle ve lib.searchByAuthor("Dostoyevski").forEach { println(it) } ile yazdır.

Başlangıç kodu

Main.kt
data class Book(val title: String, val author: String, val isbn: String)
data class Member(val name: String, val id: String)

class Library {
    val books = mutableListOf<Book>()
    val members = mutableListOf<Member>()
    val borrowed = mutableMapOf<String, String>()

    fun addBook(book: Book) { books.add(book) }
    fun addMember(member: Member) { members.add(member) }
    fun checkout(memberId: String, isbn: String) { borrowed[isbn] = memberId }
    fun returnBook(isbn: String) { borrowed.remove(isbn) }
    // searchByAuthor ve availableBooks metotlarını ekle
}

fun main() {
    val lib = Library()
    lib.addBook(Book("Suç ve Ceza", "Dostoyevski", "978-1"))
    lib.addBook(Book("Karamazov", "Dostoyevski", "978-2"))
    // searchByAuthor çağrısı: yazar Dostoyevski
}

Örnek çözüm

Main.kt
data class Book(val title: String, val author: String, val isbn: String)
data class Member(val name: String, val id: String)

class Library {
    val books = mutableListOf<Book>()
    val members = mutableListOf<Member>()
    val borrowed = mutableMapOf<String, String>()
    fun addBook(book: Book) { books.add(book) }
    fun addMember(member: Member) { members.add(member) }
    fun checkout(memberId: String, isbn: String) { borrowed[isbn] = memberId }
    fun returnBook(isbn: String) { borrowed.remove(isbn) }
    fun searchByAuthor(author: String): List<Book> = books.filter { it.author == author }
    fun availableBooks(): List<Book> = books.filter { it.isbn !in borrowed }
}

fun main() {
    val lib = Library()
    lib.addBook(Book("Suç ve Ceza", "Dostoyevski", "978-1"))
    lib.addBook(Book("Karamazov", "Dostoyevski", "978-2"))
    lib.searchByAuthor("Dostoyevski").forEach { println(it) }
}

Beklenen çıktı

Book(title=Suç ve Ceza, author=Dostoyevski, isbn=978-1)
Book(title=Karamazov, author=Dostoyevski, isbn=978-2)

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 books.filter { it.author == author } ne döndürür?

  • Tüm kitapların listesi
  • Yazarı eşleşen kitapların listesi Doğru cevap
  • Tek bir kitap
  • Boş liste

Açıklama: filter, koşulu sağlayan elemanlardan yeni liste yapar.

2 filter çağrısını tamamla

Soru
books.____ { it.author == author }
Cevap
books.filter { it.author == author }

Açıklama: filter koşula uyan elemanları seçer.

3 filter ifadelerini eşle

Kavram Anlamı
filter { it.author == a } Yazarla ara
filter { it.isbn !in b } Uygun kitaplar
forEach { println(it) } Yazdır
mutableListOf<Book>() Liste oluştur

Orta seviye bölümündeki tüm dersler