map<S> 方法

Stream<S> map<S>(
  1. S convert(
    1. T event
    )
)

将此流的每个元素转换为新流事件。

创建一个新的流,使用 convert 函数将此流的每个元素转换为新的值,并发出结果。

对于此流中的每个数据事件 o,返回的流提供一个具有值 convert(o) 的数据事件。如果 convert 抛出异常,则返回的流将其报告为错误事件。

错误和完成事件按原样传递到返回的流。

如果此流是广播流,则返回的流也是广播流。对于每个数据事件,convert 函数在每个监听器上调用一次。如果广播流被多次监听,则每个订阅都将单独在每个数据事件上调用 convert

transform 不同,此方法不将流视为单个值的块。相反,每个事件都是独立于之前和后续事件进行转换的,这不一定总是正确的。例如,如果代理对或多字节 UTF-8 编码被拆分为单独的事件,并且这些事件尝试独立进行编码或解码,UTF-8 编码或解码将给出错误的结果。

示例

final stream =
    Stream<int>.periodic(const Duration(seconds: 1), (count) => count)
        .take(5);

final calculationStream =
    stream.map<String>((event) => 'Square: ${event * event}');
calculationStream.forEach(print);
// Square: 0
// Square: 1
// Square: 4
// Square: 9
// Square: 16

实现

Stream<S> map<S>(S convert(T event)) {
  return new _MapStream<T, S>(this, convert);
}