1

We have a method, wherein we receive an Optional<SomeType> object. If the contained SomeType object is not null then we have to initialize a SomeOtherType object using the fields of the SomeType object and return that new object; otherwise we have to return null

We found multiple different solutions where we perform this task with two statements, first retrieving the optional object and then second creating the other type object e.g.

private SomeOtherType ourMethod() {
  SomeType someObject = getOptionalSomeTypeFromSomeWhere().orElse(null);
  return someObject != null ? new SomeOtherType(someObject.getField1(), someObject.getField2(), ...) : null;
}

Is it possible to cover this with one statement? So far we could not figure to do the null checks, accessing the fields, new object creation etc. all in one

Basically a more complex case of this question: Get field of optional object or return null

hammerfest
  • 2,203
  • 1
  • 20
  • 43
  • 2
    "We have a method, wherein we receive an Optional object, which might be null." Note that the `Optional` should never refer to a null reference : it defeats its purpose. Only the contained object could refer to `null`. – davidxxx Jul 27 '18 at 15:26
  • 1
    @davidxxx: Thanks for pointing this out. The concept was clear, but you are right that the phrasing was not good; changed it now – hammerfest Jul 27 '18 at 15:31
  • @davidxxx: Your comment was actually also useful to notice that I failed to escape the angle brackets, so only `Optional` was visible instead of `Optional` – hammerfest Jul 27 '18 at 15:37

1 Answers1

8

Use Optional.map:

return getOptionalSomeTypeFromSomeWhere()
    .map(someObject -> new SomeOtherType(someObject.getField1(), someObject.getField2(), ...)
    .orElse(null);
Andy Turner
  • 137,514
  • 11
  • 162
  • 243