【问题标题】:How can I update an item on Stream<List<Foo>> with Stream<Foo>?如何使用 Stream<Foo> 更新 Stream<List<Foo>> 上的项目?
【发布时间】:2021-06-02 13:47:56
【问题描述】:

我有一个“Foo”列表,后来得到了一些定期的单个 Foo 更新。我可以更新现有列表吗?

【问题讨论】:

  • 为什么你有一个Stream&lt;List&lt;Foo&gt;&gt; 而不是Stream&lt;Foo&gt;?List&lt;T&gt; 究竟代表什么?
  • @Dai 服务器先下发一个list,然后从websocket单条更新。
  • 请贴出FooUpdatedFoo的定义。
  • @Dai 他们是一样的

标签: flutter dart reactivex rxdart


【解决方案1】:

免责声明:我不是 Flutter 或 Dart 用户。

  • 我假设您的FooUpdatedFoo 类型具有某种主键 成员,例如FooId
  • 我假设您能够通过 FooId 的值维护内存中的 Map&lt;K,V&gt;Foo 实例。
  • 我假设您没有使用 React、Redux 或 Flux 模式。

类似这样的:

class FooStore
{
    private Map<int,Foo> foos = new Map<int,Foo>();

    public void handleInitialFooStream( Stream<List<Foo>> initialStream ) async
    {
        // This `for` loop should only iterate once, btw.
        await for( List<Foo> fooList in initialStream )
        {
            this.setInitialFoos( fooList );
        }
    }

    private void setInitialFoos( List<Foo> initialFoos )
    {
        foreach( Foo foo in initialFoos )
        {
            this.foos[ foo.FooId ] = foo;
        }
    }

    public void handleFooStream( Stream<Foo> updateStream ) async
    {
        await for( Foo foo in updateStream )
        {
            this.foos[ foo.FooId ] = foo;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多