Arama ve filtreleme
- Kotlin kursu
- Orta seviye
- Ders 62/116
- 6 dk
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
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
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
books.____ { it.author == author }
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 |