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)?
Sie können den zweiten Stream einfach in einem Set
sammeln und fragen, ob ein Element des ersten Streams in diesem Set enthalten ist:
Das Setzen von c1
ist linear in Bezug auf die Anzahl der darin enthaltenen Elemente, und contains
ist eine Operation mit konstanter Zeit.
Tags und Links algorithm java java-8 java-stream