ストリームは1回しか使用できず、汎用ソリューションの複雑さはであるため、2つのストリームの交差点を取得するか、交差点が空であるかどうかを見つけることは一般的に不可能です。 。我々は、基礎となるサプライヤーの性質について何も知らない場合は、我々は最大1つのストリームと一つのコレクションで逃げることができストリームの交差が空でないかどうかを調べる
:まだ
<T> boolean intersects(final Stream<T> c1, final Collection<T> c2) {
return c1.filter(c2::contains).findAny().isPresent();
}
、両方とも私たちのサプライヤーが注文を表す場合にはどのような同じコンパレータを使用してソートされたコレクション(最も単純なケースでは、2つのTreeSet
はComparable
です)?この場合、解はの線形の複雑さ(または、より正確には、this答えを参照してください)を持ちます。
今の質問:上記リニア溶液をのみストリームAPI(。。すなわち、入力として2つのストリームを使用)を使用して実装することができますか?
ストリーム内のデータが注文されている場合にリニアソリューションを実装できるかどうか尋ねていますか? –
反復的な解とストリームは合わないので、できることはストリーム上で 'iterator()'を呼び出すことです。 – Holger
@JimMischelはい、まさに – Bass