I have two streams, Stream<A>
and Stream<B>
. I have a constructor for a type C
that takes an A
and a B
. How do I merge the two Stream
s into a Stream<C>
?
A watershed, or drainage basin, is the area that collects water for a stream. As smaller streams flow downhill, they often merge together to form larger streams. These smaller streams are called tributaries.
import 'dart:async' show Stream; import 'package:async/async.dart' show StreamGroup; main() async { var s1 = stream(10); var s2 = stream(20); var s3 = StreamGroup.merge([s1, s2]); await for(int val in s3) { print(val); } } Stream<int> stream(int min) async* { int i = min; while(i < min + 10) { yield i++; } }
See also http://news.dartlang.org/2016/03/unboxing-packages-async-part-2.html
prints
10 20 11 21 12 22 13 23 14 24 15 25 16 26 17 27 18 28 19 29
You can use StreamZip
in package:async
to combine two streams into one stream of pairs, then create the C
objects from that.
import "package:async" show StreamZip; ... Stream<C> createCs(Stream<A> as, Stream<B> bs) => new StreamZip([as, bs]).map((ab) => new C(ab[0], ab[1]));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With