5-modul · 7-dars: Functional Interfaces

Daraja: O'rta

Functional Interfaces. Java kutubxonalari va Stream bo‘yicha nazariya, amaliy namuna va mustaqil mashq.

Tushuntirish

## Dars maqsadi Functional Interfaces tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.

## Nazariya Faqat bitta abstract methodga ega interface (SAM — Single Abstract Method); lambda/method reference bilan ishlatiladi.

Interface faqat bitta abstract methodli ekanini compile vaqtida tekshiradi; buzilsa xato beradi (majburiy emas, lekin himoya sifatida).

## Intervyuga tayyorgarlik ### Functional Interface qanday interface? Faqat bitta abstract methodga ega interface (SAM — Single Abstract Method); lambda/method reference bilan ishlatiladi.

### @FunctionalInterface annotatsiyasining vazifasi nima? Interface faqat bitta abstract methodli ekanini compile vaqtida tekshiradi; buzilsa xato beradi (majburiy emas, lekin himoya sifatida).

### Predicate vazifasi nima? Bitta argument qabul qilib `boolean` qaytaradi (`test(T)`) — shart tekshirish/filtrlash uchun.

### Consumer vazifasi nima? Bitta argument qabul qiladi, hech narsa qaytarmaydi (`accept(T)`) — amal bajarish uchun (masalan chop etish).

### Function vazifasi nima? Bitta argument (T) qabul qilib, natija (R) qaytaradi (`apply(T)`) — o'zgartirish (transform) uchun.

### Supplier vazifasi nima? Argument qabul qilmaydi, qiymat qaytaradi (`get()`) — qiymat yetkazib berish/generatsiya uchun.

### UnaryOperator vazifasi nima? `Function` ning xususiy holati — kirish va chiqish turi bir xil (`T -> T`).

### BinaryOperator vazifasi nima? `BiFunction` ning xususiy holati — ikkita bir xil turdagi argument olib, o'sha turdan natija qaytaradi (`(T,T) -> T`), masalan qo'shish.

### Primitive Functional Interface nima uchun kerak? Primitiv turlar (int, long, double) bilan autoboxing (o'rash/ochish) yukini oldini olish uchun (`IntPredicate`, `IntFunction`...).

### Primitive Functional Interface qanday vaziyatlarda ishlatiladi? Ko'p sonli primitiv qiymatlar bilan ishlaganda — performansni oshirish uchun (masalan `IntStream` amallari).

### Method Reference nima? Mavjud methodga qisqa havola (`::`) — lambda o'rniga ishlatiladi (masalan `System.out::println`).

### Method Reference-ning qanday turlari bor? 4 xil: static methodga (`Class::method`), muayyan obyekt methodiga (`obj::method`), tur obyekti methodiga (`Class::instanceMethod`) va constructorga (`Class::new`).

### Constructor as method reference nima? Constructorga havola: `Class::new` — obyekt yaratishni lambda o'rniga qisqa ifodalaydi (masalan `ArrayList::new`).

## 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

java.util.function.Predicate<Integer> even = n -> n % 2 == 0;
java.util.function.Function<Integer, String> label = n -> "Son: " + n;
System.out.println(even.test(4));
System.out.println(label.apply(4));

Keng tarqalgan xatolar

Mashqlar

Teglar: modul-05, pdp, nazariya

Interaktiv ko'rinish (viktorina, izohlar, tarix)