Java Functional Interface
Bu maqolada sizlar bilan Java Functional Interface-lar xaqida gaplashamiz.
Functional Interface
Functional Interface
— bu bitta abstract methoda ega bo’lgan interface-dir. Ya’ni faqatgina bitta abstract bo’lgan interface-ga functional interface deyiladi.
Interface-da abstract
method bu tana qismi bo’lmagan metod-dir. Interface-ni implements qilgan klass-lar shu abstract method-ini o’zlarida override
qilishlari kerak.
Functional interface-ning abstract metodi qolgan normal method-larga o’xshab parametr qabul qilish yoki nimadir return qilishi mumkun.
Shuningdek Functional Interface
-da o’zgaruvchilar, default
yoki static
method-lar bo’lishi mumkun. Ammo bitta abstract
methodi bo’lishi kera.
Functional interface-ni ba’zan Single Abstract Method Interface
(SAM interface) deb aytishadi.
Functional Interface example:
interface Drawable {
public void draw();
}
Functional interface-lar funktsional dasturlash (functional programming) yondashuviga erishishga yordam beradi. Ya’ni ular yordamida javada funktsional dasturlash (functional programming) amalga oshirsak bo’ladi.
Javada yozilgan kodlar hajmi yanada kamroq, o’qishga oson va tushunarli bo’lish uchun java 8-dan (versiyadan) boshlab Functional Interface
, Lambda expressions
va Method referenc
-lar java-ga qo’shilgan.
Javadagi functional interface-larga namuna: Runnable
, ActionListener
, Comparable
@FunctionalInterface
@FunctionalInterface
annotatsiyasi functional interface-lar tepasiga yoziladi. Buni yozish majburiy emas. Ammo Functional Interface
-larni tepasiga @FunctionalInterface
annotatsiyasini yozib qo’ysak qolgan dasturchilar uchun belgi bo’ladi va ular qiynalmasdan bu interface Functional Interface
ekanligni bilishadi.
Namuna
@FunctionalInterface
interface Drawable {
public void draw();
}
Functional Interface Example
Functional Interface
-larni ko’p ishlatiladigan xolarlatiga namunalar ko’rsak
Example 1
Bitta String
qiymat qabul qiladigan method-ga ega bo’lgan Functional Interface
-ga namuna.
@FunctionalInterface
interface StrConsumer {
void accept(String value);
}
public class Main {
public static void main(String[] args) {
StrConsumer stringConsumer = (String value) -> {
System.out.println(value);
};
stringConsumer.accept("Salom jigar bormisiz.");
}
}
Namunada
StrConsumer
functional interface ko’rsatilgan.- Unda
accept()
methodi bo’lib u bitta String qiymat qabul qiladi. main
method-dafunctional interface
-ni lambda expression orqali override qilindi.accept()
metodi kelgan qiymatni konsolga chiqaradigan qilib override (realizatsiya) qilingan.stringConsumer.accept("Salom jigar bormisiz.");
— deb accept method-igaSalom jigar bormisiz.
qiymati berib yuborilgan.- Natijada berib yuborilgan qiymat konsolga chiqdi.
Natija:
Example 2
Bitta Integer
qiymat qabul qilib Boolean
return qiladigan methodi bor bo’lgan Functional Interface
-ga namuna ko’rsak.
Quyidagi namunada berilgan sonlar ro’yxatidagi juft sonlarni konsolga chiqarilyapdi. Bunda functional interface
va lambda expression
-lardan foydalanilgan.
Namuna:
@FunctionalInterface
interface IntPredicate {
boolean test(Integer n);
}
public class Main {
public static void main(String[] args) {
IntPredicate intPredicate = (Integer n) -> {
if (n % 2 == 0) {
return true;
}
return false;
};
List<Integer> integerList = new LinkedList<>();
integerList.add(2);
integerList.add(3);
integerList.add(4);
integerList.add(5);
for (Integer n : integerList) {
if (intPredicate.test(n))
System.out.println(n);
}
}
}
Namunada
IntPredicate
functional interface ko’rsatilgan.- Unda
test()
methodi bo’lib u bitta Integer qiymat qabul qiladi vaboolean
qiymat return qiladi. main
method-dafunctional interface
-ni lambda expression orqali override qilindi.test()
methodi kelgan son juft bo’lsatrue
bo’lmasafalse
return qiladigan qilib override (yozilgan) qilingan.intPredicate.test(n)
— deb test method-igan
-ning qiymatini berib yuboryapmiz. Method berilgan son juft bo’lsa true bo’lmasa false return qiladi.- Natijada berilgan sonlar ro’yxatidan juft sonlarni konsolga chiqardik.
Muhim! Jigarlar java dasturchilari loyihalarda ishlash jarayonda ko’p ishlatiladigan functional interface
-larni aniqlab ularni oldindan java-da yozib qo’yishgan. Biz shu interface-larni olib bemalol ishlatsak bo’ladi.
tepadagi namunalarda o’zimiz yaratgan StrConsumer
va IntPredicate
functional interface-lari javada tayyor qilib yozib qo’yilgan.
O’zimiz yozmasdan javada oldindan yozib qo’yilgan Consumer
va Predicate
functional interface-larini ishlatishimiz mumkun. Bular haqida keyingi ma’qolalarda.