diff --git a/src/main/java/io/vavr/control/Option.java b/src/main/java/io/vavr/control/Option.java index 1a97091479..ca54846fe0 100644 --- a/src/main/java/io/vavr/control/Option.java +++ b/src/main/java/io/vavr/control/Option.java @@ -486,6 +486,23 @@ public final Option orElse(Supplier> supplier) return isEmpty() ? (Option) supplier.get() : this; } + /** + * Returns this {@code Option} if this is defined, or {@code null} if it is empty. + * + *
{@code
+     * // = Some("Hello World")
+     * Option.of("Hello World").orNull();
+     *
+     * // = null
+     * Option.none().orNull();
+     * }
+ * + * @return this value if it is defined, or {@code null} if it is empty. + */ + public final T orNull() { + return isEmpty() ? null : get(); + } + /** * Returns the value if this is a {@code Some}, otherwise {@code supplier.get()} is returned. *

diff --git a/src/test/java/io/vavr/control/OptionTest.java b/src/test/java/io/vavr/control/OptionTest.java index addde47efd..b4aa933c24 100644 --- a/src/test/java/io/vavr/control/OptionTest.java +++ b/src/test/java/io/vavr/control/OptionTest.java @@ -220,6 +220,18 @@ public void shouldReturnAlternativeOnOrElseSupplierIfValueIsNotDefined() { assertThat(Option.none().orElse(() -> opt)).isSameAs(opt); } + // -- orNull + + @Test + public void shouldReturnValueOnOrNullIfValueIsDefined() { + assertThat(Option.of("v").orNull()).isEqualTo("v"); + } + + @Test + public void shouldReturnValueOnOrNullIfValueIsEmpty() { + assertThat(Option.none().orNull()).isNull(); + } + // -- getOrElse @Test