Java Functional Interface

Java Functional Interface

Bu maqolada sizlar bilan Java Functional Interface-lar xaqida gaplashamiz.

 

93321f2b c4c0 4aa3 8c7d 8ea132478f3e

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 InterfaceLambda expressions va Method referenc-lar java-ga qo’shilgan.

Javadagi functional interface-larga namuna: RunnableActionListenerComparable

 


@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-da functional 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-iga Salom jigar bormisiz. qiymati berib yuborilgan.
  • Natijada berib yuborilgan qiymat konsolga chiqdi.

 

Natija:

Salom jigar bormisiz.

 

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 va boolean qiymat return qiladi.
  • main method-da functional interface-ni lambda expression orqali override qilindi.
  • test() methodi kelgan son juft bo’lsa true bo’lmasa false return qiladigan qilib override (yozilgan) qilingan.
  • intPredicate.test(n) — deb test method-iga n-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.