diff --git a/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/User.java b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/User.java new file mode 100644 index 0000000000..99a8810d5b --- /dev/null +++ b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/User.java @@ -0,0 +1,21 @@ +package com.baeldung.optionaluses; + +public class User { + + public User(String id, String name) { + this.id = id; + this.name = name; + } + + private String id; + + private String name; + + public String getName() { + return name; + } + + public String getId() { + return id; + } +} diff --git a/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithNull.java b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithNull.java new file mode 100644 index 0000000000..c41de1b5f5 --- /dev/null +++ b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithNull.java @@ -0,0 +1,20 @@ +package com.baeldung.optionaluses; + +import java.util.Arrays; +import java.util.List; + +public class UserRepositoryWithNull { + + private final List dbUsers = Arrays.asList(new User("1", "John"), new User("2", "Maria"), new User("3", "Daniel")); + + public User findById(String id) { + + for (User u : dbUsers) { + if (u.getId().equals(id)) { + return u; + } + } + + return null; + } +} diff --git a/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithOptional.java b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithOptional.java new file mode 100644 index 0000000000..f31e35d85f --- /dev/null +++ b/core-java-modules/core-java-optional/src/main/java/com/baeldung/optionaluses/UserRepositoryWithOptional.java @@ -0,0 +1,21 @@ +package com.baeldung.optionaluses; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +public class UserRepositoryWithOptional { + + private final List dbUsers = Arrays.asList(new User("1", "John"), new User("2", "Maria"), new User("3", "Daniel")); + + public Optional findById(String id) { + + for (User u : dbUsers) { + if (u.getId().equals(id)) { + return Optional.of(u); + } + } + + return Optional.empty(); + } +} diff --git a/core-java-modules/core-java-optional/src/test/java/com/baeldung/optionaluses/UsesForOptionalUnitTest.java b/core-java-modules/core-java-optional/src/test/java/com/baeldung/optionaluses/UsesForOptionalUnitTest.java new file mode 100644 index 0000000000..d0f92be097 --- /dev/null +++ b/core-java-modules/core-java-optional/src/test/java/com/baeldung/optionaluses/UsesForOptionalUnitTest.java @@ -0,0 +1,64 @@ +package com.baeldung.optionaluses; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class UsesForOptionalUnitTest { + + @Test + public void givenNonExistentUserId_whenSearchForUser_andNoNullCheck_thenThrowException() { + + UserRepositoryWithNull userRepositoryWithNull = new UserRepositoryWithNull(); + String nonExistentUserId = "4"; + + assertThrows(NullPointerException.class, () -> { + System.out.println("User name: " + userRepositoryWithNull.findById(nonExistentUserId) + .getName()); + }); + } + + @Test + public void givenNonExistentUserId_whenSearchForUser_thenOptionalShouldBeTreatedProperly() { + + UserRepositoryWithOptional userRepositoryWithOptional = new UserRepositoryWithOptional(); + String nonExistentUserId = "4"; + + String userName = userRepositoryWithOptional.findById(nonExistentUserId) + .orElse(new User("0", "admin")) + .getName(); + + assertEquals("admin", userName); + } + + @Test + public void givenExistentUserId_whenFoundUserWithNameStartingWithMInRepositoryUsingNull_thenNameShouldBeUpperCased() { + + UserRepositoryWithNull userRepositoryWithNull = new UserRepositoryWithNull(); + + User user = userRepositoryWithNull.findById("2"); + String upperCasedName = ""; + + if (user != null) { + if (user.getName().startsWith("M")) { + upperCasedName = user.getName().toUpperCase(); + } + } + + assertEquals("MARIA", upperCasedName); + } + + @Test + public void givenExistentUserId_whenFoundUserWithNameStartingWithMInRepositoryUsingOptional_thenNameShouldBeUpperCased() { + + UserRepositoryWithOptional userRepositoryWithOptional = new UserRepositoryWithOptional(); + + String upperCasedName = userRepositoryWithOptional.findById("2") + .filter(u -> u.getName().startsWith("M")) + .map(u -> u.getName().toUpperCase()) + .orElse(""); + + assertEquals("MARIA", upperCasedName); + } +}