Finden, ob der Stream-Schnittpunkt nicht leer ist

8

Das Erhalten einer Schnittmenge von zwei Streams oder das Finden, ob ihre Kreuzung leer ist oder nicht, ist in Java im Allgemeinen nicht möglich, da Streams nur einmal verwendet werden können und die generische Lösung ein Komplexität.

Wenn wir nichts über die Art des zugrunde liegenden Lieferanten wissen, können wir höchstens einen Stream und eine Collection durchmachen:

%Vor%

Was aber, wenn unsere beiden Lieferanten geordnete Kollektionen darstellen, die mit demselben Komparator sortiert sind (im einfachsten Fall zwei TreeSet s von Comparable s)? In diesem Fall hat die Lösung lineare Komplexität (oder genauer gesagt , siehe diese Antwort.

Nun die Frage: Kann die obige lineare Lösung mit only Stream API implementiert werden (d. h. zwei Streams als Eingabe verwenden)?

    
Bass 26.05.2016, 13:59
quelle

1 Antwort

7

Sie können den zweiten Stream einfach in einem Set sammeln und fragen, ob ein Element des ersten Streams in diesem Set enthalten ist:

%Vor%

Das Setzen von c1 ist linear in Bezug auf die Anzahl der darin enthaltenen Elemente, und contains ist eine Operation mit konstanter Zeit.

    
Tunaki 26.05.2016, 14:22
quelle

Tags und Links