एक Optional क्लास एक कंटेनर प्रदान करता है जिसमें नॉन-नल मान हो भी सकता है और नहीं भी। यह Optional क्लास जावा 8 में पेश की गई थी ताकि कोड में उन स्थानों की संख्या कम की जा सके जहां NullPointerException उत्पन्न हो सकता है। जावा 9 ने Optional क्लास में तीन नए मेथड जोड़े: or(), ifPresentOrElse() और stream() जो हमें डिफ़ॉल्ट मान से निपटने में मदद करते हैं।
Optional.or()
or() मेथड जावा 9 में पेश किया गया है और इस मेथड का पैरामीटर एक फंक्शनल इंटरफेस Supplier है। यह मेथड हमेशा हमें एक Optional ऑब्जेक्ट देता है जो खाली नहीं है। यदि Optional ऑब्जेक्ट खाली नहीं है, तो यह Optional ऑब्जेक्ट को स्वयं लौटाता है। अन्यथा, यह एक Optional ऑब्जेक्ट लौटाता है जो Supplier बनाता है।
उदाहरण
import java.io.IOException;
import java.util.Optional;
public class OptionalOrMethodTest {
public static void main(String[] args) throws IOException {
String str = null;
Optional opt = Optional.ofNullable(str);
Optional result = opt.or(() -> Optional.of("Adithya"));
System.out.println(result);
}
}
आउटपुट
Optional[Adithya]
Optional.ifPresentOrElse()
ifPresentOrElse() मेथड जावा 9 में पेश किया गया है। यह ifPresent() मेथड के समान है जिसमें एक अंतर है कि हमने एक और Runnable पैरामीटर जोड़ा है। यदि कोई Optional ऑब्जेक्ट खाली है, तो Runnable इंटरफेस का ऑब्जेक्ट निष्पादित किया जा सकता है।
उदाहरण
import java.util.Optional;
public class OptionalIfPresentOrElseTest {
public static void main(String[] args) {
String str = null;
Optional opt = Optional.ofNullable(str);
opt.ifPresentOrElse(
x -> System.out.println(x),
() -> System.out.println("No value"));
}
}
आउटपुट
No value
Optional.stream()
Optional.stream() मेथड जावा 9 से समर्थित है। इस मेथड का उपयोग Optional ऑब्जेक्ट से एक नया स्ट्रीम ऑब्जेक्ट बनाने के लिए किया जा सकता है। यदि कोई Optional ऑब्जेक्ट मान रखता है, तो यह उस मान वाली स्ट्रीम ऑब्जेक्ट लौटाता है।
उदाहरण
import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
public class OptionalStreamMethodTest {
public static void main(String[] args) throws IOException {
List> list = List.of(
Optional.of("Jai"),
Optional.empty(),
Optional.of("Adithya"));
Stream stream = list.stream().flatMap(Optional::stream);
stream.forEach(System.out::println);
}
}
आउटपुट
Jai Adithya