🎯
Stream skip method
Skip Stream Example
概要
skip()
メソッドは、Streamの最初のn個のイベントをスキップする機能を提供します。これは、初期値や不要なデータを除外したい場合に特に有用です。
example
import 'dart:async';
/// 指定秒数分の値をスキップするStream
Stream<int> skipSleepStream() async* {
var count = 0;
while (count < 10) {
yield count;
await Future<void>.delayed(Duration(seconds: 1));
count++;
}
}
void main() {
final stream = skipSleepStream();
print('スキップなしの場合:');
stream.listen((value) => print('オリジナル: $value'));
print('\nスキップ(3)を使用した場合:');
// 最初の3つの値をスキップ
skipSleepStream()
.skip(3)
.listen(
(value) => print('Skip後: $value'),
onDone: () => print('完了'),
);
}
コードの説明
Stream生成部分
Stream<int> skipSleepStream() async* {
var count = 0;
while (count < 10) {
yield count;
await Future<void>.delayed(Duration(seconds: 1));
count++;
}
}
- 0から9までの値を1秒間隔で生成
- 合計10個の値を出力
skip()の使用方法
stream.skip(3).listen((value) => print('Skip後: $value'));
skip(3)
は以下のように動作します:
- 最初の3つの値(0, 1, 2)をスキップ
- 残りの値(3, 4, 5, 6, 7, 8, 9)のみを出力
出力例
スキップ(3)を使用した場合:
オリジナル: 0
オリジナル: 1
オリジナル: 2
オリジナル: 3
Skip後: 3
オリジナル: 4
Skip後: 4
オリジナル: 5
Skip後: 5
オリジナル: 6
Skip後: 6
オリジナル: 7
Skip後: 7
オリジナル: 8
Skip後: 8
オリジナル: 9
Skip後: 9
完了
使用例
- センサーデータの初期ノイズの除去
- ストリーム開始時の不安定なデータのスキップ
- ページネーションでの特定ページまでのスキップ
- ウォームアップ期間後のデータ収集
重要なポイント
-
skip(n)
のnは正の整数である必要がある - nがストリームの長さより大きい場合、出力は空になる
- ブロードキャストストリームの場合、スキップはリスン開始時点からカウント
- エラーイベントはスキップされない(そのまま通過する)
関連するStreamメソッド
-
skipWhile()
: 条件が真である間スキップ -
skipUntil()
: 別のストリームがイベントを発行するまでスキップ -
take()
: 最初のn個のイベントのみを取得(skipの逆)
注意点
- メモリ効率: スキップされた値はメモリに保持されない
- 非同期処理: スキップ処理は非同期で行われる
- ブロードキャストストリーム: 各リスナーに対して個別にスキップが適用される
Discussion