Streamクラスのtransform()メソッドについてメモ書き。
transform()は受け取ったStreamを別のStreamに変換するメソッド。
transform()は引数にStreamTransformerクラスを受け取る。StreamTransformer<T,S>で指定し、Tには変換前の型、Sには変換後の型を指定する。例えば、変換前のStreamの型がint、変換後の型がStringだとすると、StreamTransformer<int,String>のように指定する。
コーディングで動作確認。
StreamTransformerはdart:asyncライブラリに含まれているので、importしておく。
import 'dart:async';
void main() {
Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]);
// 引数で渡すStreamTransformerを作成。int型をString型に変換
var transformer = StreamTransformer<int, String>.fromHandlers(
handleData: (value, sink) {
sink.add('data:$value');
},
);
// transformメソッドを実行
Stream<String> transformedStream = stream.transform(transformer);
// 新しいStreamの各要素を出力
transformedStream.listen((value) {
print(value);
});
}
上記はStreamTransformerクラスのfromHandlersコンストラクを使用している。fromHandlersの名前付き引数handleData:でStreamの変換処理を記述している。第1引数のvalueには受け取った値が入り、第2引数のsink.add()で変換後の値を追加している。StreamTransformer<int,String>にしているので、valueはint型でsink.add()はString型となる。
実行結果。
int型のStreamがString型のStreamに変換されている。
data:1
data:2
data:3
data:4
data:5
コメント