Dart Streamクラスのdistinct()メソッドについてメモ書き。
distinct()はStreamイベントの重複を除外するメソッド。
対象は前後のStreamイベントで、データが離れていれば除外しない。
オプション引数としてequalsメソッドを指定できる。equalsには第1引数と第2引数があり、それぞれ前後のStreamイベントが代入される。equalsは戻り値としてbool型を返し、戻り値がtrueの場合、後イベントが除外される。
equalsを使うことで、独自の重複除外処理を追加できる。
コーディングで動作確認。
先ずはオプション引数を指定せずに実行。
void main() {
List<String> listTest = [
"Apple",
"Orange",
"Orange",
"Orange",
"Banana",
"Orange"
];
strTest(listTest).distinct().listen(print);
}
Stream<String> strTest(List<String> lst) async* {
for (var s in lst) {
yield s;
}
}
実行結果。
Apple
Orange
Banana
Orange
次は前後の文字数が等しい場合に除外するようオプション引数に処理を追加。
void main() {
List<String> listTest = [
"Apple",
"Orange",
"Orange",
"Orange",
"Banana",
"Orange"
];
strTest(listTest).distinct((a, b) {
return a.length == b.length;
}).listen(print);
}
Stream<String> strTest(List<String> lst) async* {
for (var s in lst) {
yield s;
}
}
実行結果。
Apple
Orange
コメント