Skip to content

Commit 56e13fb

Browse files
authored
BAEL-3994: Add example of chaining methods returning Optionals (eugenp#9102)
* BAEL-3994: Add example of chaining methods returning Optionals * BAEL-3994: Update
1 parent 202c7d1 commit 56e13fb

2 files changed

Lines changed: 45 additions & 2 deletions

File tree

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.baeldung.orelseoptional;
2+
3+
import java.util.Optional;
4+
5+
public class ItemsProvider {
6+
7+
Optional<String> getEmptyItem() {
8+
System.out.println("Returning an empty item");
9+
return Optional.empty();
10+
}
11+
12+
Optional<String> getNail() {
13+
System.out.println("Returning a nail");
14+
return Optional.of("nail");
15+
}
16+
17+
Optional<String> getHammer() {
18+
System.out.println("Returning a hammer");
19+
return Optional.of("hammer");
20+
}
21+
}

core-java-modules/core-java-optional/src/test/java/com/baeldung/orelseoptional/OrElseOptionalUnitTest.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.baeldung.orelseoptional;
22

3-
import static org.junit.Assert.assertEquals;
3+
import org.junit.Test;
44

55
import java.util.Optional;
66

7-
import org.junit.Test;
7+
import static org.junit.Assert.assertEquals;
88

99
public class OrElseOptionalUnitTest {
1010

@@ -25,6 +25,28 @@ public void givenEmptyOptional_whenValue_thenOptionalGeneralMethod() {
2525
assertEquals(fallbackOptionalString, OptionalUtils.or(optionalString, fallbackOptionalString));
2626
}
2727

28+
@Test
29+
public void givenTwoOptionalMethods_whenFirstEmpty_thenSecondEvaluated() {
30+
ItemsProvider itemsProvider = new ItemsProvider();
31+
32+
Optional<String> item = itemsProvider.getEmptyItem()
33+
.map(Optional::of)
34+
.orElseGet(itemsProvider::getNail);
35+
36+
assertEquals(Optional.of("nail"), item);
37+
}
38+
39+
@Test
40+
public void givenTwoOptionalMethods_whenFirstNonEmpty_thenSecondNotEvaluated() {
41+
ItemsProvider itemsProvider = new ItemsProvider();
42+
43+
Optional<String> item = itemsProvider.getNail()
44+
.map(Optional::of)
45+
.orElseGet(itemsProvider::getHammer);
46+
47+
assertEquals(Optional.of("nail"), item);
48+
}
49+
2850
// Uncomment code when code base is compatible with Java 9
2951
// @Test
3052
// public void givenOptional_whenEmptyValue_thenCustomMessage() {

0 commit comments

Comments
 (0)