5-modul · 9-dars: Stream API · Comparator · Collectors
Daraja: O'rta
Stream API · Comparator · Collectors. Java kutubxonalari va Stream bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi Stream API · Comparator · Collectors tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Java 8 dagi ma'lumot oqimlarini deklarativ qayta ishlash API si (filter/map/reduce/collect).
`stream()` — ketma-ket (bitta thread). `parallelStream()` — ma'lumotni bo'lib, bir necha thread (ForkJoinPool) da parallel ishlaydi (katta hajmda tezroq bo'lishi mumkin).
## Intervyuga tayyorgarlik ### Stream API nima? Java 8 dagi ma'lumot oqimlarini deklarativ qayta ishlash API si (filter/map/reduce/collect).
### .stream() va .parallelStream() qanday farq qiladi? `stream()` — ketma-ket (bitta thread). `parallelStream()` — ma'lumotni bo'lib, bir necha thread (ForkJoinPool) da parallel ishlaydi (katta hajmda tezroq bo'lishi mumkin).
### Nima uchun Stream Lazy deyiladi? Intermediate operatorlar darhol ishlamaydi — faqat terminal operator chaqirilganda bajariladi. Bu keraksiz hisoblashni oldini oladi.
### Comparator nima? Obyektlarni tashqi mezon bo'yicha solishtirish interfeysi (`compare(a,b)`).
### JDK 1.8 da Comparator-ga qanday o'zgarishlar kiritildi? Ko'p tayyor default/static methodlar qo'shildi: `comparing`, `thenComparing`, `reversed`, `naturalOrder`, `nullsFirst` — zanjirlab yozish imkonini beradi.
### Collector nima? Stream elementlarini yig'ib, natijaga (List, Set, Map, String, statistika) aylantiruvchi vosita (`Collectors` orqali).
### Collectorlar terminal operatorlarmi? Ha — `collect(...)` terminal operator; Collector uning ichida yig'ish strategiyasini belgilaydi.
### Collectorlar qanday ishlaydi? Supplier (konteyner yaratadi), accumulator (element qo'shadi), combiner (parallel qismlarni birlashtiradi), finisher (yakuniy natija) qismlari orqali yig'adi.
### Collectorlarning qanday turlarini bilasiz va qachon ishlatiladi? `toList/toSet/toMap` (kolleksiyaga), `joining` (matnga), `groupingBy` (guruhlash), `partitioningBy` (shart bo'yicha 2 ga), `counting`, `summingInt/averagingInt`, `reducing`.
### Primitive Streamlar qanday streamlar? Primitiv turlar uchun maxsus streamlar — autoboxing yukisiz, qo'shimcha sonli methodlar (sum, average) bilan.
### Primitive Streamlarga misollar ayting. `IntStream`, `LongStream`, `DoubleStream`.
## 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 grouped = java.util.List.of("Ali", "Vali", "Aziz").stream()
.collect(java.util.stream.Collectors.groupingBy(String::length));
System.out.println(grouped);
Keng tarqalgan xatolar
- `parallelStream` ni o'ylamasdan ishlatish - kichik to'plamda sekinlashtiradi.
- Stream ichida umumiy o'zgaruvchini o'zgartirish - bu yon ta'sir va parallel rejimda xavfli.
Mashqlar
- `Collectors.groupingBy` bilan elementlarni guruhlang va sanang.
- `Comparator.comparing(...).thenComparing(...)` bilan ikki mezon bo'yicha saralang.
Teglar: nazariya, modul-05, pdp