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

Mashqlar

Teglar: nazariya, modul-05, pdp

Interaktiv ko'rinish (viktorina, izohlar, tarix)