Functional Interfaces java in hindi
जावा प्रोग्रामिंग लैंग्वेज में एक फंक्शनल इंटरफ़ेस ऐसा यूजर डिफाइन फंक्शन इंटरफ़ेस मेथड होता है, जिसमें सिर्फ़ एक यूजर डिफाइन प्रोग्राम एब्स्ट्रैक्ट मेथड क्रिएट होता है। जिसका मुख्य रूप से यूज़ जावा प्रोग्राम में लैम्ब्डा एक्सप्रेशन कंडीशन और यूजर डिफाइन लैम्ब्डा मेथड रेफरेंस को रिप्रेजेंट करने में किया जाता है. जिससे की जावा में फंक्शनल प्रोग्रामिंग मॉडुलर पैराडाइम में ज़्यादा कॉम्पैक्ट और इजी टू अंडरस्टैंड प्रोग्राम सोर्स कोड क्रिएट करना पॉसिबल हो जाता है।

Important Features of a Functional Interface in Java
- Only one abstract method – जावा लैम्ब्डा एक्सप्रेशन फंक्शनल इंटरफ़ेस में सिर्फ़ एक एब्स्ट्रैक्ट मेथड डिफाइन होता है। जैसा की, इस एक्सप्रेशन में कई डिफ़ॉल्ट या स्टैटिक फंक्शनल मेथड डिफाइन हो सकते हैं।
- Can be used with lambda expressions – जैसा की जावा प्रोग्राम में लैम्ब्डा एक्सप्रेशन फंक्शनल इंटरफ़ेस में एक ही मेथड से कनेक्ट होता है. इस वजह से ऐसे फंक्शनल इंटरफ़ेस को ज्यादातर लैम्ब्डा एक्सप्रेशन के लिए एक टारगेट के रूप में यूज़ किया जाता है।
- @FunctionalInterface Annotation – जैसा की फंक्शनल इंटरफ़ेस में यह इम्पोर्टेन्ट नहीं है, जावा यूजर प्रोग्राम में यह इंडीकेट करने के लिए @FunctionalInterface प्रोग्राम एनोटेशन फीचर्स का यूज़ कर सकते हैं। यदि किसी लैम्ब्डा फंक्शनल प्रोग्राम में जावा यूजर गलती से एक से ज़्यादा एब्स्ट्रैक्ट मेथड ऐड कर देते हैं. तो यह प्रोग्राम में डिफाइन मल्टीप्ल एनोटेशन प्रोग्राम मिस्टेक्स को कैच करने में हेल्प करता है।
Basic syntax of a Java functional interface.
@FunctionalInterface in lambda expression
public interface SampleFunctionalInterface {
void startAction(); // One user define abstract method define
// Optional: default or static methods functional method define
default void logAction() {
System.out.println(“Action started.”);
}
static void printMessage() {
System.out.println(“Static functional message display.”);
}
}
Features of a Java functional interface.
- यहाँ इस प्रोग्राम में एक फंक्शनल इंटरफ़ेस में एक और सिर्फ़ एक एब्स्ट्रैक्ट यूजर डिफाइन मेथड ही डिक्लेअर होना चाहिए।
- जावा यूजर एक लैम्ब्डा एक्सप्रेशन फंक्शनल इंटरफ़ेस में कई डिफ़ॉल्ट और स्टैटिक मेथड जरूरत के अनुसार क्रिएट कर सकते हैं।
- यदि किसी जावा यूजर डिफाइन फंक्शनल इंटरफ़ेस में कई एब्स्ट्रैक्ट मेथड डिफाइन हैं, तो उसे जावा प्रोग्राम में अब फंक्शनल इंटरफ़ेस के रूप में ट्रीट नहीं किया जाएगा और वह मौजूदा लैम्ब्डा एक्सप्रेशन के साथ वर्क नहीं करेगा।
Features of Commonly Used Functional Interfaces in the Java Language.
जावा इसके प्रोग्रामर को Java, java.util.function पैकेज में कई बिल्ट-इन लाइब्रेरी फंक्शनल इंटरफ़ेस प्रोवाइड करता है, जावा में इनका यूज़ सामान्य रूप से लैम्ब्डा एक्सप्रेशन के साथ फंक्शनल प्रोग्रामिंग टास्क को परफॉर्म करने में किया जाता है।
Runnable Java Functional Interface.
जावा प्रोग्राम में रनेबल फंक्शनल इंटरफ़ेस एक ऐसे टास्क को डिस्प्ले करता है, जिसे मौजूदा प्रोग्राम में एसिंक्रोनसली एग्जीक्यूट किया जा सकता है। रनेबल फंक्शनल इंटरफ़ेस एक सिंगल मेथड run() फंक्शन द्वारा डिफाइन होता है. जो किसी प्रोग्राम में कोई यूजर पैरामीटर इनपुट नहीं लेता और कुछ भी वैल्यू रिटर्न नहीं करता है।
Runnable task = () -> System.out.println(“User define Task is runningnow…”);
new Thread(task).start(); // Here it Execute the Runnable task in a separate thread
Single Abstract Method: void run()
Consumer<T> Java Functional Interface.
जावा प्रोग्राम में Consumer<T> इंटरफ़ेस एक ऐसा ऑपरेशन को डिस्प्ले करता है, जो प्रोग्राम में एक सिंगल इनपुट आर्गुमेंट वैल्यू को इनपुट लेता है, और आउटपुट के रूप में कोई रिज़ल्ट प्रोवाइड नहीं करता है। जावा में इस इंटरफ़ेस का यूज़ सामान्य रूप से तब किया जाता है. जब जावा यूजर को किसी प्रोग्राम ऑब्जेक्ट पर कोई एक्शन अप्लाई करना चाहते हैं।
Consumer<String> info = message -> System.out.println(message);
info.accept(“Welcome to, Vcanhelpsu”); // here it result – Welcome to, Vcanhelpsu
Single Abstract Method: void accept(T t)
Supplier<T> Java Functional Interface.
जावा प्रोग्राम में Supplier<T> फंक्शनल इंटरफ़ेस प्रोग्राम में रिज़ल्ट के सप्लायर को डिस्प्ले करता है। Supplier<T> फंक्शनल इंटरफ़ेस में एक मेथड get() होती है, जो T टाइप की वैल्यू प्रोवाइड करता है। यह कोई प्रोग्राम में कोई इनपुट नहीं लेता है।
Supplier<Double> randomSupplier = () -> Math.random();
System.out.println(randomSupplier.get()); // here it result a random double value according
Single Abstract Method: T get()
Function<T, R> Java Functional Interface.
जावा प्रोग्राम में Function<T, R> इंटरफ़ेस एक ऐसा फ़ंक्शन डिस्प्ले करता है, जो T टाइप का आर्गुमेंट प्रोग्राम में इनपुट लेता है, और R टाइप के रूप में रिज़ल्ट प्रोवाइड करता है। Function<T, R> इंटरफ़ेस का यूज़ सामान्य रूप से डेटा मैप करने या मॉडिफाई करने में किया जाता है।
Function<String, Integer> stringLength = str -> str.length();
System.out.println(stringLength.apply(“Vcanhelpsu”)); // here it result – 10
Single Abstract Method: R apply(T t)
Predicate<T> Java Functional Interface.
जावा प्रोग्राम में Predicate<T> इंटरफ़ेस एक आर्गुमेंट का बूलियन-वैल्यू वाले फ़ंक्शन को रिप्रेजेंट करता है। Predicate<T> इंटरफ़ेस का यूज़ सामान्य रूप से यह चेक करने में किया जाता है कि मौजूदा प्रोग्राम में कोई ऑब्जेक्ट किसी स्पेशल कंडीशन को कम्पलीट करता है, या नहीं है।
Predicate<Integer> isEven = integer -> integer % 2 == 0;
System.out.println(isEven.test(18)); // here it result – true result
Single Abstract Method: boolean test(T t)
UnaryOperator<T> Java Functional Interface.
जावा प्रोग्राम में UnaryOperator<T> इंटरफ़ेस, Function<T, T> का एक स्पेशल यूज़ केस फॉर्मेट है, जो यूजर इनपुट पर एक ट्रांसफ़ॉर्मेशन को अप्लाई करता है, और उसी टाइप पर T का रिज़ल्ट प्रोवाइड करता है।
UnaryOperator<Integer> square_value = integer -> integer * integer;
System.out.println(square_value.apply(7)); // here it result – 49
Single Abstract Method: T apply(T t)
BinaryOperator<T> Java Functional Interface.
जावा प्रोग्राम में BinaryOperator<T> इंटरफ़ेस, BiFunction<T, T, T> का भी अपना एक स्पेशल यूज़ केस फॉर्मेट है, जो एक ही टाइप के दो आर्गुमेंट को यूजर से इनपुट लेता है, और उसी टाइप का रिज़ल्ट प्रोवाइड करता है।
BinaryOperator<Integer> total = (p, q) -> p + q;
System.out.println(total.apply(3, 4)); // here it result – 7
Single Abstract Method: T apply(T t1, T t2)
BiFunction<T, U, R> Java Functional Interface.
जावा प्रोग्राम में BiFunction<T, U, R> इंटरफ़ेस एक ऐसा फ़ंक्शन डिस्प्ले करता है, जो किसी प्रोग्राम में अलग-अलग टाइप (T और U) के दो आर्गुमेंट इनपुट लेता है, और R टाइप का रिज़ल्ट प्रोवाइड करता है।
BiFunction<Integer, Integer, Integer> mul = (p, q) -> p * q;
System.out.println(mul.apply(4, 8)); // here it result – 32
Single Abstract Method: R apply(T t, U u)
BiPredicate<T, U> Java Functional Interface.
जावा प्रोग्राम में BiPredicate<T, U> इंटरफ़ेस Predicate<T> के जैसा ही एक इंटरफ़ेस है, लेकिन यह प्रोग्राम में दो आर्गुमेंट वैल्यू इनपुट लेता है, और आउटपुट के रूप में एक बूलियन वैल्यू प्रोवाइड करता है।
BiPredicate<String, Integer> checkLength = (str, len) -> str.length() > len;
System.out.println(checkLength.test(“Vcanhelpsu”, 4)); // here it result – true
Single Abstract Method: boolean test(T t, U u)
Example of Functional Interface Use in Java.
तो चलिए यहाँ हम एक ऐसे फ़ंक्शन इंटरफ़ेस का यूज़ करके एक स्ट्रिंग को उसकी लंबाई में बदले और उसके बाद Predicate को यूज़ कर एक कंडीशन को अप्लाई करे।
import java.util.function.Function;
import java.util.function.Predicate;
public class FunctionalInterfaceIllustration {
public static void main(String[] args) {
// here we use Function to get the length of the given string
Function<String, Integer> stringLength = str -> str.length();
// here we use Predicate to check if length f string is greater than 7 or not
Predicate<Integer> isLengthGreaterThanSeven = length -> length > 7;
// here we Apply a function to get the length of the given string
String input = “Vcanhelpsu”;
Integer length = stringLength.apply(input);
// here we Apply predicate to check the above condition is true or not
if (isLengthGreaterThanSeven.test(length)) {
System.out.println(“here The given string is more than 7 characters.”);
} else {
System.out.println(“here is the The given string is 7 or less characters.”);
}
}
}
Advantages of using functional interfaces in the Java language.
- Simplifies code – जावा प्रोग्राम में लैम्ब्डा एक्सप्रेशन फंक्शन का यूज़ करके जावा प्रोग्रामर फंक्शनल इंटरफेस को अधिक क्लियर और स्माल फॉर्मेट में प्रोग्राम कोड क्रिएट कर सकते हैं।
- Promotes functional programming – जावा फंक्शनल इंटरफ़ेस प्रोग्रामिंग में अब इम्म्युटेबिलिटी और डिक्लेरेटिव कंस्ट्रक्ट जैसे फंक्शनल प्रोग्रामिंग कॉन्सेप्ट का एडवांटेज ले सकते है।
- Improved reusability – जावा में फंक्शनल इंटरफेस, विशेष रूप से java.util.function पैकेज लाइब्रेरी में कई यूजर डिफाइन फंक्शन मेथड और क्लास में जरूरत के अनुसार मल्टीप्ल यूज़ किए जा सकते हैं।
- Works with streams – जावा फंक्शनल इंटरफेस प्रोग्राम स्ट्रीम एपीआई कई ऑपरेशन्स की बैकबोन हैं, जो जावा प्रोग्रामर को प्रोग्राम में एलिमेंट फ़िल्टरिंग, मैपिंग, और रिड्यूसिंग जैसे प्रोग्राम ऑपरेशन्स करने की परमिशन प्रोवाइड करता हैं।
