From 679d45ca37a2eaaf33f5b6c5927fe71f0daca811 Mon Sep 17 00:00:00 2001 From: dev-chirag <41482403+dev-chirag@users.noreply.github.com> Date: Sun, 25 Oct 2020 16:13:22 +0530 Subject: [PATCH] BAEL4640 Find First with Optional (#10142) * BAEL4640 Find First with Optional * BAEL4640 Fixes for review comments * BAEL4640 Removing blank lines * BAEL4640 Removing blank lines * BAEL4640 Changes for 8.3 Optional.flatMap Co-authored-by: Chirag Dewan --- .../com/baeldung/nulls/UsingOptional.java | 33 +++++++++++++++++-- .../baeldung/nulls/UsingOptionalUnitTest.java | 31 ++++++++++++----- 2 files changed, 53 insertions(+), 11 deletions(-) diff --git a/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingOptional.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingOptional.java index d5dd56e760..6aeadb8f2c 100644 --- a/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingOptional.java +++ b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingOptional.java @@ -1,23 +1,50 @@ package com.baeldung.nulls; +import java.util.List; import java.util.Optional; +import static java.util.Collections.emptyList; + public class UsingOptional { - public Optional process(boolean processed) { + public static final String DEFAULT_VALUE = "Default Value"; + public Optional process(boolean processed) { String response = doSomething(processed); return Optional.ofNullable(response); } - private String doSomething(boolean processed) { + public String findFirst() { + return getList().stream() + .findFirst() + .orElse(DEFAULT_VALUE); + } + + public Optional findOptionalFirst() { + return getList().stream() + .findFirst(); + } + + private List getList() { + return emptyList(); + } + + public Optional optionalListFirst() { + return getOptionalList().flatMap( + list -> list.stream().findFirst()); + } + + private Optional getOptionalList() { + return Optional.ofNullable(getList()); + } + + private String doSomething(boolean processed) { if (processed) { return "passed"; } else { return null; } } - } diff --git a/patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingOptionalUnitTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingOptionalUnitTest.java index 8f896cedfa..73797d48c8 100644 --- a/patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingOptionalUnitTest.java +++ b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingOptionalUnitTest.java @@ -11,32 +11,47 @@ import static org.junit.jupiter.api.Assertions.assertTrue; class UsingOptionalUnitTest { - private UsingOptional classUnderTest; + private UsingOptional dataObject; @BeforeEach public void setup() { - classUnderTest = new UsingOptional(); + dataObject = new UsingOptional(); } @Test public void whenArgIsFalse_thenReturnEmptyResponse() { - - Optional result = classUnderTest.process(false); + Optional result = dataObject.process(false); assertFalse(result.isPresent()); } @Test public void whenArgIsTrue_thenReturnValidResponse() { - - Optional result = classUnderTest.process(true); + Optional result = dataObject.process(true); assertTrue(result.isPresent()); } @Test public void whenArgIsFalse_thenChainResponseAndThrowException() { - - assertThrows(Exception.class, () -> classUnderTest.process(false).orElseThrow(() -> new Exception())); + assertThrows(Exception.class, () -> dataObject.process(false).orElseThrow(() -> new Exception())); } + + @Test() + void givenEmptyList_whenFindFirst_getDefaultValue() { + assertTrue(dataObject.findFirst().equalsIgnoreCase(UsingOptional.DEFAULT_VALUE)); + } + + @Test() + void givenEmptyList_whenFindOptionalFirst_returnsEmptyOptional() { + assertFalse(dataObject.findOptionalFirst().isPresent()); + } + + @Test() + void whenOptionalListFirst_returnsEmptyOptional() { + assertFalse(dataObject.optionalListFirst().isPresent()); + } + + + } \ No newline at end of file