在 Stream 上使用时,Distinct() 似乎没有过滤掉相同的结果
Distinct() doesn't seem to filter out identical results when used on a Stream
请看一下这段代码=>
void main() async {
Stream<int> _intStream() async* {
for (int i = 0; i < 10; i++) yield i;
}
Stream<int> _even() => _intStream().where((int i) => i % 2 == 0);
Stream<bool> _isEven(Stream<int> stream) => stream.map((int i) => i % 2 == 0);
print('test 1: should print 5 [true] and 5 [false] alternate');
await for (bool b in _isEven(_intStream())) {
print('test 1: $b');
}
print('test 2: should print 5 [true]');
await for (bool b in _isEven(_even())) {
print('test 2: $b');
}
print('test 3: should print ONLY ONE [true]');
await for (bool b in _isEven(_even().distinct())) {
print('test 3: $b');
}
}
我是不是用错了distinct()
?
提前致谢
没关系,我只是把 distinct 放在了错误的地方,
以下按预期工作
void main() async {
Stream<int> _intStream() async* {
for (int i = 0; i < 10; i++) yield i;
}
Stream<int> _even() => _intStream().where((int i) => i % 2 == 0);
Stream<bool> _isEven(Stream<int> stream) => stream.map((int i) => i % 2 == 0);
print('test 1: should print 5 [true] and 5 [false] alternate');
await for (bool b in _isEven(_intStream())) {
print('test 1: $b');
}
print('test 2: should print 5 [true]');
await for (bool b in _isEven(_even())) {
print('test 2: $b');
}
print('test 3: should print ONLY ONE [true]');
await for (bool b in _isEven(_even()).distinct()) {
print('test 3: $b');
}
}
请看一下这段代码=>
void main() async {
Stream<int> _intStream() async* {
for (int i = 0; i < 10; i++) yield i;
}
Stream<int> _even() => _intStream().where((int i) => i % 2 == 0);
Stream<bool> _isEven(Stream<int> stream) => stream.map((int i) => i % 2 == 0);
print('test 1: should print 5 [true] and 5 [false] alternate');
await for (bool b in _isEven(_intStream())) {
print('test 1: $b');
}
print('test 2: should print 5 [true]');
await for (bool b in _isEven(_even())) {
print('test 2: $b');
}
print('test 3: should print ONLY ONE [true]');
await for (bool b in _isEven(_even().distinct())) {
print('test 3: $b');
}
}
我是不是用错了distinct()
?
提前致谢
没关系,我只是把 distinct 放在了错误的地方, 以下按预期工作
void main() async {
Stream<int> _intStream() async* {
for (int i = 0; i < 10; i++) yield i;
}
Stream<int> _even() => _intStream().where((int i) => i % 2 == 0);
Stream<bool> _isEven(Stream<int> stream) => stream.map((int i) => i % 2 == 0);
print('test 1: should print 5 [true] and 5 [false] alternate');
await for (bool b in _isEven(_intStream())) {
print('test 1: $b');
}
print('test 2: should print 5 [true]');
await for (bool b in _isEven(_even())) {
print('test 2: $b');
}
print('test 3: should print ONLY ONE [true]');
await for (bool b in _isEven(_even()).distinct()) {
print('test 3: $b');
}
}