3つのプロデューサからの文字列を非同期で受け取ったとします。Java - インターリーブされたイテレータ/コレクションを取得する方法
が"a1" received from A,
"a2" received from A,
"c1" received from C,
"a3" received from A,
"b1" received from B,
"b2" received from B,
私は文字列を返すために、「インターリーブされた」イテレータを希望:これらのオブジェクトの特定の量は、私は、インターリーブ方法でそれらを反復処理したい受信したら、以下の文字列を受け取った場合、つまり、これまでのところ、私は、各プロデューサの1 List<String>
を作成しました、そして私は(3つのリストイテレータと協力して、すべての文字列の上に「反復」だ
List<String> interleavedList = {"a1", "b1", "c1", "a2", "c2", "a3"},
:私たちは、以下のリストを反復処理しているかのようにa )。これはうまく動作しますが、私は単純な方法があると思います...文字列を受け取っている間にインターリーブされたリストを直接作成することによって、私はどのCollection
またはどちらがComparator
を使用するかわかりません...
各プロデューサの1つのリストを作成し、次に3番目のリストを4番目のインターリーブリストにマージすることはあまり興味がありません。おそらく時間効率的ではないでしょう。
効率についてもっと教えていただけますか?例えば。ただし、[CyclicBarrier](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html)を使用すると、プロデューサを遅くすることができます。一方、あなたが言及したようにリストを使用することは、完全に時間効率的です。代わりにメモリを使い果たします。 –
これを達成するには、java.util.Iteratorをサブクラス化することができます。次のhttp://stackoverflow.com/questions/3610261/is-it-possible-to-merge-iterators-in-java –
を参照してください。Java 8を使用している場合は、ストリームでインターリーブ文字列を試しましたか? –