Das Ermitteln einer Schnittmenge von zwei Streams oder das Ermitteln, 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 eine Komplexität aufweist .Ermitteln, ob Stream-Schnittmenge nicht leer ist
Wenn wir nichts über die Natur der zugrunde liegenden Lieferanten kennen, können wir mit höchstens einem Strom und einer Sammlung weg:
<T> boolean intersects(final Stream<T> c1, final Collection<T> c2) {
return c1.filter(c2::contains).findAny().isPresent();
}
Doch was, wenn beide unsere Lieferanten bestellt vertreten Sammlungen sortiert mit dem gleichen Komparator (im einfachsten Fall zwei TreeSet
s von Comparable
s)? In diesem Fall hat die Lösung linear Komplexität (oder genauer , siehe this Antwort).
Nun ist die Frage: kann die obige lineare Lösung implementiert werden nur Stream-API (i e mit zwei Ströme als Eingang..)?
Fragen Sie, ob Sie die lineare Lösung implementieren können, wenn die Daten in den Streams geordnet sind? –
Iterative Lösungen und Streams passen nicht zusammen, also ist das Beste, was Sie tun können, 'iterator()' in den Streams aufzurufen und weiter zu machen. – Holger
@JimMischel Ja, genau – Bass