如何比较流中的每个事件,streamController dart
Posted
技术标签:
【中文标题】如何比较流中的每个事件,streamController dart【英文标题】:How to compare each events in stream, 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));
【问题讨论】:
【参考方案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
。
【讨论】:
以上是关于如何比较流中的每个事件,streamController dart的主要内容,如果未能解决你的问题,请参考以下文章