5-modul · 8-dars: Introduction to Streams
Daraja: O'rta
Introduction to Streams. Java kutubxonalari va Stream bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi Introduction to Streams tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya «Qanday» qilishni bosqichma-bosqich yozadigan uslub — loop, if bilan qadamlarni qo'lda boshqarish.
«Nima» kerakligini ifodalab, «qanday» bajarilishini tizimga qoldiradigan uslub (masalan Stream API).
## Intervyuga tayyorgarlik ### Imperative Coding nima? «Qanday» qilishni bosqichma-bosqich yozadigan uslub — loop, if bilan qadamlarni qo'lda boshqarish.
### Declarative Coding nima? «Nima» kerakligini ifodalab, «qanday» bajarilishini tizimga qoldiradigan uslub (masalan Stream API).
### Declarative Coding-ga misollar? Stream API (`filter`, `map`, `collect`), SQL so'rovlari, funksional dasturlash uslubidagi kod.
### Stream nima? Ma'lumotlar ketma-ketligi ustida funksional (deklarativ) amallar bajarish uchun oqim; manbani o'zgartirmaydi va saqlamaydi.
### Stream API nima? Java 8 dagi (`java.util.stream`) collection/massiv ma'lumotlarini deklarativ qayta ishlash (filter, map, reduce) uchun API.
### Streamlarning Collection-lardan farqi nima? Collection — ma'lumotni saqlaydi. Stream — saqlamaydi, qayta ishlash uchun oqim; bir marta ishlatiladi, dangasa (lazy) va manbani o'zgartirmaydi.
### Stream yaratish usullari? `collection.stream()`, `Arrays.stream(arr)`, `Stream.of(...)`, `Stream.iterate/generate`, `IntStream.range`, `Files.lines`, `String.chars`.
### Qanday Stream Operatorlari mavjud? 2 turi: Intermediate (oraliq — Stream qaytaradi) va Terminal (yakuniy — natija/side-effect qaytaradi).
### Intermediate Operatorlar qanday operatorlar? Streamni o'zgartirib yangi Stream qaytaradi; dangasa (lazy) — terminal chaqirilmaguncha ishlamaydi (`filter`, `map`, `sorted`, `distinct`, `limit`).
### Terminal Operatorlar qanday operatorlar? Streamni yakunlab, natija yoki side-effect qaytaradi va oqimni «iste'mol qiladi» (`collect`, `forEach`, `reduce`, `count`, `findFirst`).
### Intermediate Operatorlar necha turga bo'linadi? 2 turga: Stateless va Stateful.
### Stateless operatorlar qanday operatorlar? Har elementni oldingi elementlardan mustaqil, holat saqlamasdan qayta ishlaydi (`filter`, `map`).
### Stateful operatorlar qanday operatorlar? Ishlash uchun oldingi elementlar holatini yoki butun oqimni bilishi kerak (`sorted`, `distinct`, `limit`).
## Versiya va aniqlik Java misollari Java 17 bazasiga mo‘ljallangan. JDK/JRE paketlash usuli distributivga bog‘liq; JVM bayt-kodni interpretatsiya va JIT orqali bajarishi mumkin. GC uchun aniq bajarilish vaqtiga kafolat yo‘q; finalization resurs yopish usuli emas. Thread stop/suspend/resume kabi eski metodlar amaliy yechim emas. Koddagi import, klass yoki tashqi kutubxona kontekstini tekshiring.
Manbadagi 17 dars oldingi o‘quv arxividagi 10 guruhga birlashtirilgan: Lombok/Faker va Stream/Collectors hamda HttpClient/Gson/Reflection/Annotations birgalikda o‘rganiladi.
## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/5-module.md) [Rasmiy qo‘llanma](https://dev.java/learn/) [Sizning avvalgi savol-javob arxivingiz](https://lightyer.uz/java/interview.html)
Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.
Kod misoli
var stream = java.util.List.of(1, 2, 3, 4).stream()
.filter(n -> n % 2 == 0).map(n -> n * n);
System.out.println(stream.toList()); // [4, 16]
// Stream terminal amaldan keyin qayta ishlatilmaydi.
Keng tarqalgan xatolar
- Stream ni ikki marta ishlatishga urinish - u bir martalik.
- Terminal operator yozmaslik - hech narsa bajarilmaydi va sabab ko'rinmaydi.
Mashqlar
- Ro'yxatni filtrlab, o'girib, yig'ib bitta stream zanjirida yozing.
- Bir xil vazifani tsikl va stream bilan yozib, o'qish qulayligini baholang.
Teglar: nazariya, modul-05, pdp