Core Java

Convert Optional to ArrayList

1. Introduction

Java 8 introduced the java.util.Optional class to represent a value that may or may not be present to avoid NullPointerException. Converting an Optional to a java.util.ArrayList can be useful in scenarios where we want to handle optional values as lists. For example, finding the sum from a list or transforming the data. In this example, I will demonstrate the Optional ArrayList conversion with the following examples.

  • Convert Optional to ArrayList via isPresent.
  • Convert Optional to ArrayList via orElse and orElseGet.
  • Convert Optional to ArrayList via Stream.
  • Convert Optional to ArrayList via Stream and find the sum of the items.
  • Convert Optional to ArrayList via Stream and loop the items.

2. Setup

In this step, I will create a maven project with the Junit library.

pom.xml

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.zheng.demo</groupId>
    <artifactId>convert_optional_to_arraylist</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <release>17</release>
                </configuration>
            </plugin>
        </plugins>
    </build>
 
    <dependencies>
        <!-- junit 5 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.5.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

3. Junit Test Class For Optional ArrayList Conversion

In this step, I will create a TestConvertOptionalToArrayList.java test class to show a few ways to convert an Optional to an ArrayList.

  • test_ifPresent – when the Optional has value, then add it to ArrayList with the optional.ifPresent method.
  • test_orElse – when the Optional has no value, then add the default value to ArrayList via optional.orElse.
  • test_orElseGet – when the Optional has no value, then add the default value to ArrayList via optional.orElseGet.
  • test_stream_getSum – convert the Optional to ArrayList via the Stream function and get the sum of the list items
  • test_stream_loopItems -convert the Optional to ArrayList via the Stream function and loop the list items.
  • test_stream_withData – convert a valued Optional to ArrayList .
  • test_stream_withNoData – convert an empty Optional to ArrayList .

TestConvertOptionalToArrayList.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package org.zheng.demo;
 
import static org.junit.jupiter.api.Assertions.assertTrue;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
 
import org.junit.jupiter.api.Test;
 
public class TestConvertOptionalToArrayList {
 
    private static final String A_STRING = "Hello, Mary!";
    private static final String Z_STRING = "Default";
    private Optional<List<Integer>> emptyIntegers = Optional.empty();
    private Optional<String> emptyOptional = Optional.empty();
 
    private Optional<List<Integer>> optionalIntegers = Optional.of(List.of(30, 60));
    private Optional<String> optionalValue = Optional.of(A_STRING);
 
    private Integer getSum(final List<Integer> values) {
        return values.stream().mapToInt(Integer::intValue).sum();
    }
 
    private void loopItems(final List<Integer> values) {
        values.stream().forEach((value) -> System.out.println("Value: " + value));
    }
 
    @Test
    void test_ifPresent() {
        List<String> arrayList = new ArrayList<>();
        optionalValue.ifPresent(arrayList::add);
 
        assertTrue(arrayList.contains(A_STRING));
    }
 
    @Test
    void test_orElse() {
        List<String> arrayList = new ArrayList<>();
        arrayList.add(emptyOptional.orElse(Z_STRING));
 
        assertTrue(arrayList.contains(Z_STRING));
    }
 
    @Test
    void test_orElseGet() {
        List<String> arrayList = new ArrayList<>();
        arrayList.add(emptyOptional.orElseGet(() -> Z_STRING));
 
        assertTrue(arrayList.contains(Z_STRING));
    }
 
    @Test
    void test_stream_getSum() {
        optionalIntegers.ifPresentOrElse(values -> loopItems(values), () -> System.out.println("No values present"));
 
        System.out.println("Loop Item via List");
        loopItems(optionalIntegers.stream().flatMap(List::stream).collect(Collectors.toList()));
 
        System.out.println("Sum Items via List: "
                + getSum(optionalIntegers.stream().flatMap(List::stream).collect(Collectors.toList())));
    }
 
    @Test
    void test_stream_loopItems() {
        emptyIntegers.ifPresentOrElse(values -> loopItems(values), () -> System.out.println("No values present"));
 
        loopItems(emptyIntegers.stream().flatMap(List::stream).collect(Collectors.toList()));
    }
 
    @Test
    void test_stream_withData() {
        List<String> arrayList = optionalValue.stream().collect(Collectors.toList());
 
        assertTrue(arrayList.contains(A_STRING));
    }
 
    @Test
    void test_stream_withNoData() {
        List<String> arrayList = emptyOptional.stream().collect(Collectors.toList());
         
        assertTrue(arrayList.isEmpty());
    }
}
  • Line 23, 27: Stream function to get sum and loop items.
  • Line 33, 41, 49: Add the Optional value to ArrayList via ifPresent, orElse, orElseGet methods.
  • Line 56, 67: The Optional value is List itself, use it as ArrayList .
  • Line 59, 69: Convert the ArrayList of Optional to Streamand flat it to ArrayList.
  • Line 74, 81: Convert Optional to ArrayList via Stream.

4. Demo Optional ArrayList Conversion

In this step, I will run the Junit tests and capture the output here.

TestConvertOptionalToArrayList Output

1
2
3
4
5
6
7
Value: 30
Value: 60
Loop Item via List
Value: 30
Value: 60
Sum Items via List: 90
No values present

Also capture the screenshot of the Junit test result.

Figure 1. Junit Test Result

5. Conclusion

In this example, I demonstrated the Optional ArrayList conversion with the examples

  • Convert Optional to ArrayList via isPresent.
  • Convert Optional to ArrayList via orElse and orElseGet.
  • Convert Optional to ArrayList via Stream.
  • Convert Optional to ArrayList via Stream and find the sum of the items.
  • Convert Optional to ArrayList via Stream and loop the items.

6. Download

This was an example of a maven project which converting an Optional to an ArrayList.

Download
You can download the full source code of this example here: Convert Optional to ArrayList
Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
I agree to the Terms and Privacy Policy

Mary Zheng

Mary graduated from the Mechanical Engineering department at ShangHai JiaoTong University. She also holds a Master degree in Computer Science from Webster University. During her studies she has been involved with a large number of projects ranging from programming and software engineering. She worked as a lead Software Engineer where she led and worked with others to design, implement, and monitor the software solution.
Subscribe
Notify of
guest


This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button