join 方法
- [String separator = ""]
将元素的字面表示形式合并成一个字符串。
每个元素都使用它的 Object.toString 方法转换成字符串。如果提供了 separator
,它将被插入到各元素字符串表示形式之间。
当此流完成时,返回的 future 会完成,并带有合并的字符串。
如果此流发出一个错误,或者对 Object.toString 的调用抛出异常,则返回的 future 会完成并带有该错误,处理停止。
示例
final result = await Stream.fromIterable(['Mars', 'Venus', 'Earth'])
.join('--');
print(result); // 'Mars--Venus--Earth'
实现
Future<String> join([String separator = ""]) {
_Future<String> result = new _Future<String>();
StringBuffer buffer = new StringBuffer();
bool first = true;
StreamSubscription<T> subscription =
this.listen(null, onError: result._completeError, onDone: () {
result._complete(buffer.toString());
}, cancelOnError: true);
subscription.onData(separator.isEmpty
? (T element) {
try {
buffer.write(element);
} catch (e, s) {
_cancelAndErrorWithReplacement(subscription, result, e, s);
}
}
: (T element) {
if (!first) {
buffer.write(separator);
}
first = false;
try {
buffer.write(element);
} catch (e, s) {
_cancelAndErrorWithReplacement(subscription, result, e, s);
}
});
return result;
}