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

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


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

1020112112221323142415251626172718281929


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 need to react when either Stream<A> or Stream<B> emits an event and use the latest value from both streams, use combineLatest.

Stream<C> merge(Stream<A> streamA, Stream<B> streamB) {  return streamA    .combineLatest(streamB, (a, b) => new C(a, b));}