How can I merge multiple Streams into a higher level Stream?

Brett picture Brett · Apr 12, 2016 · Viewed 12.6k times · Source

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 Streams into a Stream<C>?

Answer

G&#252;nter Z&#246;chbauer picture Günter Zöchbauer · Apr 12, 2016
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