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

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

Dart StreamクラスのsingleWhere()メソッドについてメモ書き。

singleWhere()は条件を満たす要素1つを返すメソッド。Future<T>型を返す。
第1引数はtest関数で条件を記述する。test関数の戻り値はbool型で、条件にマッチする要素を1つ見つけた場合はtrue、そうでない場合はfalseを返す。
第2引数は名前付きオプション引数orElse:()で、条件にマッチする要素が無かった場合の処理を記述する。orElse:()を指定しない場合はエラーになる。
複数の要素が条件にマッチする場合は、orElse:()に関わらず例外が発生する。

コーディングで動作を確認。
Streamの要素に”ora”が入っているものを抽出する。

void main() async {
  final stream =
      Stream.fromIterable(["apple", "orange", "banana", "pineapple"]);
  await stream.singleWhere((element) => element.contains("ora")).then(print);
}

実行結果。

orange

次はorElse:()を追加し、条件に一致しない場合を確認。

void main() async {
  final stream =
      Stream.fromIterable(["apple", "orange", "banana", "pineapple"]);
  await stream
      .singleWhere(
        (element) => element.contains("zero"),
        orElse: () => "No Match",
      )
      .then(print);
}

実行結果。条件にマッチしないので、orElse:()が実行される。

No Match

最後は条件にマッチする要素が複数存在する場合を確認。

void main() async {
  final stream =
      Stream.fromIterable(["apple", "orange", "banana", "pineapple"]);
  await stream
      .singleWhere(
        (element) => element.contains("apple"),
        orElse: () => "No Match",
      )
      .then(print);
}

実行結果。
例外が発生する。

Unhandled exception:
Bad state: Too many elements

コメント

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