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
toArrayList
viaisPresent
. - Convert
Optional
toArrayList
viaorElse
andorElseGet
. - Convert
Optional
toArrayList
viaStream
. - Convert
Optional
toArrayList
viaStream
and find the sum of the items. - Convert
Optional
toArrayList
viaStream
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 | xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" > < 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 theOptional
has value, then add it toArrayList
with theoptional.ifPresent
method.test_orElse
– when theOptional
has no value, then add the default value toArrayList
viaoptional.orElse
.test_orElse
Get – when theOptional
has no value, then add the default value toArrayList
viaoptional.orElseGet
.test_stream_getSum
– convert theOptional
toArrayList
via theStream
function and get the sum of the list itemstest_stream_loopItems
-convert theOptional
toArrayList
via theStream
function and loop the list items.test_stream_withData
– convert a valuedOptional
toArrayList
.test_stream_withNoData
– convert an emptyOptional
toArrayList
.
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 toArrayList
viaifPresent
,orElse
,orElseGet
methods. - Line 56, 67: The
Optional
value isList
itself, use it asArrayList
. - Line 59, 69: Convert the
ArrayList
ofOptional
toStream
and flat it toArrayList
. - Line 74, 81: Convert
Optional
toArrayList
viaStream
.
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.
5. Conclusion
In this example, I demonstrated the Optional ArrayList conversion with the examples
- Convert
Optional
toArrayList
viaisPresent
. - Convert
Optional
toArrayList
viaorElse
andorElseGet
. - Convert
Optional
toArrayList
viaStream
. - Convert
Optional
toArrayList
viaStream
and find the sum of the items. - Convert
Optional
toArrayList
viaStream
and loop the items.
6. Download
This was an example of a maven project which converting an Optional
to an ArrayList
.
You can download the full source code of this example here: Convert Optional to ArrayList