stream method
If a value is present, returns an Iterable containing only that value, otherwise returns an empty Iterable.
API Note
This method can be used to transform an Iterable of optional elements to an Iterable of present value elements:
Iterable<Optional<T>> optionals = ...;
Iterable<T> values = optionals.expand((opt) => opt.stream());
Returns the optional value as an Iterable.
Example
Optional<String> name = Optional.of("Iris");
Optional<String> empty = Optional.empty();
// Convert to iterable
Iterable<String> nameStream = name.stream();
print(nameStream.toList()); // ["Iris"]
Iterable<String> emptyStream = empty.stream();
print(emptyStream.toList()); // []
// Useful for functional processing
List<Optional<String>> optionals = [
Optional.of("apple"),
Optional.empty(),
Optional.of("banana")
];
List<String> fruits = optionals
.expand((opt) => opt.stream())
.toList();
print(fruits); // ["apple", "banana"]
// Chain with other stream operations
List<String> upperFruits = optionals
.expand((opt) => opt.stream())
.map((fruit) => fruit.toUpperCase())
.where((fruit) => fruit.startsWith('A'))
.toList();
print(upperFruits); // ["APPLE"]
Implementation
Iterable<T> stream() {
if (isEmpty()) {
return <T>[];
} else {
return [_value as T];
}
}