如何比较流中的每个事件,streamController dart

时间:2019-06-15 10:14:48

标签: flutter dart

我有问题(示例):

  

给出数字= [2,11,7,15],目标= 9,
  因为nums [0] + nums [2]   = 2 + 7 = 9,返回[0,2]。

我写了一个硬编码来解决这个问题:

void twoSumHardCode(List<int> nums, int target){
  for (int i = 0; i < nums.length; i++) {
    for (int j = i + 1; j < nums.length; j++) {
      if(nums[j] == target - nums[i]){
        print([i, j]);
      }
    }
  }
}

我想用Stream,StreamController解决此问题。我如何比较第一个事件与后续事件。因为我是流媒体中的新手,到目前为止我还不太了解,如何将“硬编码”重写为“ streamcode”。
我写了一点:

void twoSum(List<int> nums, int target){

  final controller = new StreamController();
  nums.map((int num) => controller.sink.add(num));

  final transformer = StreamTransformer.fromHandlers(
    handleData: (number, sink){
//      final List<int> indices = []

    }
  );

  controller.stream.
      map((number){
        //
      })
      .transform(transformer)
      .listen((numbers) => print(numbers));
}

1 个答案:

答案 0 :(得分:0)

流不用于此目的。您的问题需要(在内存中)流曾经发出的所有值,对吗?

因此,为此您必须将流转换为List,等待其所有值都被体现。

   Stream<int> numbers() async* {
      for (var num in [2, 11, 7, 15]) {
        yield num;
      }
    }

    void main() async {

      var list = await numbers().toList();

      twoSumHardCode(list, 9);

    }

此外,如果出于某种原因需要保留所模拟的值,则可以使用rxdart库的ReplaySubject