2017-08-14 5 views
0

私はの項目がの範囲内のインデックスです0..nこのストリームをnストリームに分割したいと思います整数で表す。ストリームの項目のプロパティに基づいてストリームを複数のストリームに分割する

Iは、次の項目は、それが届いたときnシンクのいずれかにアイテムをプッシュ

  • のためのものであるかどうかを決定するために基本となるストリームでピークしそれぞれがnストリームを作成

    私はこれらの可能性のどちらも説得力がないと感じます。最初のものは不必要なオーバーヘッドを作成するように見え、2番目のものはちょうどエレガントではありません(それがうまくいくかどうかわかりません)。

    ストリームを分割する良い方法はありますか?

  • 答えて

    0

    channelsを使用して、インデックス固有のストリームを表すことができます。元のストリームから引き出したTaskの1つを生成し、Senderのマップを持つ必要があります。

    1

    ある時点で私は同様の要求を持ち、Streamgroup_by演算子を書きました。

    私は実際にそれが消費の準備ができていないと感じたので、これをcrates.ioに公開していませんが、https://github.com/Lukazoid/lz_stream_toolsのコードを見てみるか、自分でそれを使用しようとしてください。

    は、あなたのcargo.tomlに以下を追加します。あなたのbin.rs/lib.rsへ

    [dependencies] 
    lz_stream_tools = { git = "https://github.com/Lukazoid/lz_stream_tools" } 
    

    extern crate lz_stream_tools;を。あなたのコードから次に

    あなたがそうのようにそれを使用することがあります。

    use lz_stream_tools::StreamTools; 
    
    let groups = some_stream.group_by(|x| x.0); 
    

    groupsは今(u32, Stream<Item=Bytes))Streamになります。

    関連する問題