Dart StreamクラスasyncMap()メソッド

Dar言語StreamクラスtoSet()メソッドDart

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

コメント

タイトルとURLをコピーしました