So currently I have
String uri = website.getUri();
Optional pageDetail = webClient.getDetailOfUri(uri);
String displayName;
String description;
Use Optional#orElseGet that takes a Supplier:
// Reference to the constructor, but you could use a Factory, etc.
// All you need is a method that returns a PageDetail
// See the Javadoc and http://www.byteslounge.com/tutorials/java-8-consumer-and-supplier
Supplier emptySupplier = PageDetail::new;
pageDetail = pageDetail.orElseGet(emptySupplier);
// works the same
//pageDetail = pageDetail.orElseGet(() -> new PageDetail());
String displayname = pageDetail.getName();
String uri = pageDetail.getUri();
orElseGet
will create an empty PageDetail only if the Optional has a null value. This keeps your code resource efficient.
Editable/compilable sample : https://ideone.com/9h1Ntg
Edit: Thanks everybody for the feedback! I was actually adding orElseGet
which I find better. I also fixed the code to unwrap the Optional
so pageDetail
ends being an actual PageDetail
instance.
Edit 2: Added different syntax example and editable/compilable example.