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