【问题标题】:How to compare each events in stream, streamController dart如何比较流中的每个事件,streamController dart
【发布时间】:2019-06-15 10:14:48
【问题描述】:

我有一个问题(示例):

给定 nums = [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 来解决这个问题。我如何将第一个事件与后续事件进行比较。因为我是流中的新手,到目前为止我不太了解,如何将“硬代码”重写为“流代码”..
我写了一点:

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));
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

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

    因此,为此,您必须将流转换为 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);
    
        }
    

    另外,如果您出于某种原因需要缓存 emmited 值,您可以使用 rxdart 库的 ReplaySubject

    【讨论】:

      猜你喜欢
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多