Dart StreamクラスのasyncMap()メソッドについてメモ書き。
asyncMap()は受け取ったStreamイベントを変換し、新しいStreamイベントを返すメソッド。
引数のconvert関数で受け取ったStreamイベントに対して変換処理を行う。
似たメソッドにasyncExpand()がある。違いはconvert関数の戻り値で、asyncMap()はFutureOr<T>を返すのに対して、asyncExpand()はStream<E>?を返す。
また、asyncExpand()はnullを返す場合スキップするが、asyncMap()はスキップしない。
コーディングで動作を確認。
引数のconvert関数の戻り値はFutureOr<T>のため、Future<T>、もしくはT型の値を返す必要がある。
先ずはFuture<int?>(?はnull許容演算子)を試してみる。
void main() {
final stream = Stream<int?>.fromIterable([1, 2, null, 4, 5]);
final mapStream = stream.asyncMap((event) {
if (event == null) {
return Future.value(null);
} else {
return Future.value(event * event);
}
});
mapStream.listen(print);
}
実行結果。
1
4
null
16
25
次はint?型を試す。
void main() {
final stream = Stream<int?>.fromIterable([1, 2, null, 4, 5]);
final mapStream = stream.asyncMap((event) {
if (event == null) {
return null;
} else {
return event * event;
}
});
mapStream.listen(print);
}
実行結果。
1
4
null
16
25
コメント