join 方法

Future<String> join([
  1. 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;
}