AXV

Lambda, filter, map, forEach

Lambda sintaksisi, it, forEach, filter, map, zanjir

9-sinfAndroid dasturlash6-hafta · 17-dars

Bugun nimalarni o'rganamiz?

Lambda ifoda

Nomsiz funksiya

forEach va filter

Aylanish va tanlash

map va zanjir

O'zgartirish

Takrorlash

Map da kalit yo'q bo'lsa map[kalit] nima qaytaradi?

Kalit yo'q bo'lsa null.
01

Lambda ifoda

Nomsiz funksiya

Lambda yozish

{ parametr-> tana } Oxirgi ifoda— natija Bittaparametr: it Qavsdantashqarida Nomsiz funksiya

Lambda ifodalar


val kvadrat = { x: Int -> x * x }
println(kvadrat(5))               // 25

val ikkilash: (Int) -> Int = { it * 2 }
println(ikkilash(7))              // 14

val salom = { ism: String -> "Salom, $ism!" }
println(salom("Ali"))             // Salom, Ali!
  
(Int) -> Int — funksiya turi: «Int oladi, Int qaytaradi». Lambdaning turi kompilyatorga ma'lum bo'lsa, it ni ishlatsangiz kod qisqa bo'ladi.

Mini-test

Bitta parametrli lambdada parametr nomisiz qanday ishlatiladi?

Yagona parametr it deb ataladi.
02

forEach va filter

Aylanish va tanlash

Kolleksiya funksiyalari

forEach: harbiri uchun filter:tanlash count / any sortedBy:tartiblash Sikl o'rniga bir qator

forEach va filter


val sonlar = listOf(1, 2, 3, 4, 5, 6)
sonlar.forEach { println(it) }
val juft = sonlar.filter { it % 2 == 0 }
println(juft)                          // [2, 4, 6]
println(sonlar.count { it > 3 })       // 3
println(sonlar.any { it > 5 })         // true

val narxlar = mapOf("Laptop" to 1200.0, "Phone" to 800.0, "Watch" to 250.0)
println(narxlar.filter { it.value > 500 })   // {Laptop=1200.0, Phone=800.0}
  
filter yangi ro'yxat qaytaradi, asl ro'yxatni o'zgartirmaydi. Natijani o'zgaruvchiga saqlashni unutmang.

Mini-test

listOf(1, 2, 3, 4).filter { it > 2 } natijasi?

it > 2 shartiga 3 va 4 mos.
03

map va zanjir

O'zgartirish

Zanjir

Ro'yxat filter:tanlash map:o'zgartirish sum / forEach Chapdan o'ngga o'qiladi

map va zanjir


val nomlar = listOf("ali", "vali", "gulnora")
println(nomlar.map { it.uppercase() })   // [ALI, VALI, GULNORA]

val sonlar = listOf(1, 2, 3, 4, 5, 6)
println(sonlar.map { it * it })          // [1, 4, 9, 16, 25, 36]

val jami = sonlar.filter { it > 2 }.map { it * 10 }.sum()
println(jami)                            // 180
  
map natijasi — yangi ro'yxat: uni o'zgaruvchiga saqlang yoki println ga bering. Asl ro'yxat o'zgarmaydi.

Mini-test

listOf(1, 2, 3).map { it * 2 } natijasi?

Har element 2 ga ko'paytiriladi.

filter va map

filter

Elementlarni tanlaydi: ro'yxat qisqarishi mumkin
VS

map

Har elementni o'zgartiradi: uzunlik saqlanadi

Tanlash — filter, o'zgartirish — map.

Atamalar. Bosing

Lambda

bosing

Nomsiz funksiya { x -> ... }

it

bosing

Bitta parametrli lambdaning standart nomi

filter

bosing

Shartga mos elementlarni tanlash

map

bosing

Har elementni o'zgartirish

Qayta ishlash

1. Tanlang

filter { shart }.

2. O'zgartiring

map { amal }.

3. Hisoblang

sum, count, forEach.

Kolleksiya funksiyalari

FunksiyaVazifasiNatija turi
forEachHar biriga amalHech narsa
filterShartga mosini tanlashYangi ro'yxat
mapHar birini o'zgartirishYangi ro'yxat
countMos elementlar soniInt
anyKamida bittasi mosmiBoolean

Pastga bosing: funksiyalar

Mahsulotlarni filtrlash

  1. Mahsulot → narx Map yarating (5 ta mahsulot).
  2. filter bilan narxi 500 dan yuqori mahsulotlarni tanlang.
  3. map bilan mahsulot nomlarini katta harflarga o'tkazing va forEach bilan chiqaring.

Juft sonlarni olish


val juft = mutableListOf<Int>()
for (n in sonlar) { if (n % 2 == 0) juft.add(n) }
  

Juft sonlarni olish


val juft = sonlar.filter { it % 2 == 0 }
  

Lambda raqamlarda

0
asosiy funksiya: forEach, filter, map
0
qator — sikl o'rniga
0
— zanjir namunasining natijasi

Qisqa va o'qilishi oson kod.

Amaliy topshiriq 20 daqiqa

OsonLambda yozing: Sonni 3 ga ko'paytiradigan lambda yozing va 4 ni bering.
OsonforEach: Ism ro'yxatini forEach bilan chiqaring.
O'rtaJuft sonlar: 1..10 dan juft sonlarni filter bilan oling.
O'rtaKvadratlar: listOf(1, 2, 3, 4) kvadratlari ro'yxatini map bilan oling.
QiyinQimmat mahsulotlar: Narxi 500 dan yuqori mahsulotlar nomlarini katta harflarda chiqaring.
BonusZanjir yig'indisi: 3 dan katta sonlarni 10 ga ko'paytirib, yig'indisini hisoblang.

Dars xulosasi

Lambda

{ x -> ... }, it.

filter

Shartga mos elementlar.

map

Har elementni o'zgartirish, zanjir.

Uyga vazifa: filter, map, forEach bilan mahsulotlarni qayta ishlash.

Keyingi dars: OOP asoslari

Inkapsulyatsiya va kirish huquqlari

6-hafta · 18-dars