पाठ 4 / 38
Optional
संभवतः-अनुपस्थित परिणाम को रिटर्न टाइप के रूप में Optional से मॉडल करें, map, filter व orElseThrow से उपयोग करें, और get() तथा Optional फ़ील्ड से बचें।
इसे रिटर्न टाइप की तरह उपयोग करें
जो लुकअप कुछ न पाए वहाँ Optional<T> लौटाएँ। map, orElse, orElseThrow से उपयोग करें, get() से नहीं।
String city = repo.findUser(id)
.map(User::address)
.map(Address::city)
.orElse("unknown");of बनाम ofNullable, orElse बनाम orElseGet
Optional.of(x) null पर एक्सेप्शन देता है; Optional.ofNullable(x) null स्वीकारता है। orElse(expensive()) मान मौजूद होने पर भी आर्ग्युमेंट का मूल्यांकन कर देता है — आलसी फ़ॉलबैक के लिए orElseGet(() -> expensive()) उपयोग करें।
// Bad: buildDefault() runs even when user is present
User u = repo.find(id).orElse(buildDefault());
// Good: buildDefault() runs only when needed
User u2 = repo.find(id).orElseGet(this::buildDefault);