diff --git a/core-java-9/pom.xml b/core-java-9/pom.xml
index 1f92ee71f8..0662e1e9a2 100644
--- a/core-java-9/pom.xml
+++ b/core-java-9/pom.xml
@@ -47,6 +47,11 @@
${awaitility.version}
test
+
+ com.google.guava
+ guava
+ ${guava.version}
+
@@ -89,6 +94,7 @@
1.7.0
1.9
1.9
+ 25.1-jre
diff --git a/core-java-9/src/main/java/com/baeldung/optionals/Optionals.java b/core-java-9/src/main/java/com/baeldung/optionals/Optionals.java
new file mode 100644
index 0000000000..5efa607f94
--- /dev/null
+++ b/core-java-9/src/main/java/com/baeldung/optionals/Optionals.java
@@ -0,0 +1,26 @@
+package com.baeldung.optionals;
+
+import java.util.Optional;
+
+public class Optionals {
+
+ public static Optional or(Optional optional, Optional fallback) {
+ return optional.isPresent() ? optional : fallback;
+ }
+
+ public static Optional getName(Optional name) {
+ return name.or(() -> getCustomMessage());
+ }
+
+ public static com.google.common.base.Optional getOptionalGuavaName(com.google.common.base.Optional name) {
+ return name.or(getCustomMessageGuava());
+ }
+
+ private static Optional getCustomMessage() {
+ return Optional.of("Name not provided");
+ }
+
+ private static com.google.common.base.Optional getCustomMessageGuava() {
+ return com.google.common.base.Optional.of("Name not provided");
+ }
+}
\ No newline at end of file
diff --git a/core-java-9/src/test/java/com/baeldung/optionals/OptionalsTest.java b/core-java-9/src/test/java/com/baeldung/optionals/OptionalsTest.java
new file mode 100644
index 0000000000..4e5f94c0db
--- /dev/null
+++ b/core-java-9/src/test/java/com/baeldung/optionals/OptionalsTest.java
@@ -0,0 +1,51 @@
+package com.baeldung.optionals;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Optional;
+
+import org.junit.Test;
+
+public class OptionalsTest {
+
+ @Test
+ public void givenOptional_whenEmptyValue_thenCustomMessage() {
+ assertEquals(Optional.of("Name not provided"), Optionals.getName(Optional.ofNullable(null)));
+ }
+
+ @Test
+ public void givenOptional_whenValue_thenOptional() {
+ String name = "Filan Fisteku";
+ Optional optionalString = Optional.ofNullable(name);
+ assertEquals(optionalString, Optionals.getName(optionalString));
+ }
+
+ @Test
+ public void givenOptional_whenValue_thenOptionalGeneralMethod() {
+ String name = "Filan Fisteku";
+ String missingOptional = "Name not provided";
+ Optional optionalString = Optional.ofNullable(name);
+ Optional fallbackOptionalString = Optional.ofNullable(missingOptional);
+ assertEquals(optionalString, Optionals.or(optionalString, fallbackOptionalString));
+ }
+
+ @Test
+ public void givenEmptyOptional_whenValue_thenOptionalGeneralMethod() {
+ String missingOptional = "Name not provided";
+ Optional optionalString = Optional.empty();
+ Optional fallbackOptionalString = Optional.ofNullable(missingOptional);
+ assertEquals(fallbackOptionalString, Optionals.or(optionalString, fallbackOptionalString));
+ }
+
+ @Test
+ public void givenGuavaOptional_whenInvoke_thenOptional() {
+ String name = "Filan Fisteku";
+ com.google.common.base.Optional stringOptional = com.google.common.base.Optional.of(name);
+ assertEquals(stringOptional, Optionals.getOptionalGuavaName(stringOptional));
+ }
+
+ @Test
+ public void givenGuavaOptional_whenNull_thenDefaultText() {
+ assertEquals(com.google.common.base.Optional.of("Name not provided"), Optionals.getOptionalGuavaName(com.google.common.base.Optional.fromNullable(null)));
+ }
+}
\ No newline at end of file