Three approaches to Optionals list conversion (using streams).
- filter + map
dataStream() .filter(Optional::isPresent) .map(Optional::get)
- flatMap
dataStream() .flatMap(x -> x.map(Stream::of).orElseGet(Stream::empty))
- flatMap + Optional as a stream
dataStream() .flatMap(Optional::stream)
Remark: Internally Optional::stream
is implemented:
public Stream<T> stream() {
if (!isPresent()) {
return Stream.empty();
} else {
return Stream.of(value);
}
}
Fully tested in OptionalListConversionTest
.