首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Sink<T>转换为Sink<V>?

如何将Sink<T>转换为Sink<V>?
EN

Stack Overflow用户
提问于 2019-11-29 20:15:08
回答 2查看 80关注 0票数 0

我有一个方法可以将其输出发送到给定的Sink<Node>中。

我想把它导入stdout,这是一个Sink<List<int>>

假设我有一个函数convertNode转换为List<int>,我如何将stdout转换为Sink<Node>,以便将my Tree打印到控制台?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-29 20:26:39

我已经做了这个例子,展示了如何使用StreamController来完成这个任务:

代码语言:javascript
复制
import 'dart:async';
import 'dart:convert';
import 'dart:io';

class Message {
  String text;
  Message(this.text);
}

void main() {
  final controller = StreamController<Message>();
  stdout.addStream(controller.stream
      .map((var msg) => msg.text)
      .transform(const Utf8Encoder()));

  var messageSink = controller.sink;
  messageSink.add(Message('Hello World'));
}

本例中的StreamController接受Message对象并将它们转换为List<int>,方法是首先使用mapMessage转换为String对象,然后使用转换器将字符串转换为UTF8字节列表。

票数 2
EN

Stack Overflow用户

发布于 2022-12-02 23:49:40

我已经登记了:https://github.com/dart-lang/sdk/issues/50607

我就是这样解决这个问题的:

代码语言:javascript
复制
class _MappedSink<From, To> implements Sink<From> {
  final To Function(From) _transform;
  final Sink<To> _sink;
  const _MappedSink(this._sink, this._transform);

  @override
  void add(From data) => _sink.add(_transform(data));
  @override
  void close() => _sink.close();
}

extension SinkMap<To> on Sink<To> {
  Sink<From> map<From>(To Function(From) transform) =>
      _MappedSink(this, transform);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59110527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档