Implementieren eines Drehkreuz-ähnlichen Operators mit RxJava

Ich brauche Hilfe bei der Implementierung eines Drehkreuz-ähnlichen Operators in RxJava (RxScala). Ich habe eine ganze Weile darüber nachgedacht, aber ich scheine festzustecken.

Der Typ der Funktion sollte der folgende sein:

def turnstile[T](queue: Observable[T], turnstile: Observable[Boolean]): Observable[T]

Die Idee ist, dass das Verhalten des Bedieners einem echten Drehkreuz sehr ähnlich sein sollte. Es kommen Leute queue) und es gibt einturnstile das ist entweder bereit für die Annahme neuerSingl person (atrue -Element im Drehkreuz, Sie können es sich als Zeichen vorstellen, das in das Drehkreuz eingefügt wird) oder geschlossen false im Drehkreuz, vorheriges Token stornieren). Für jedentrue Element im Drehkreuz darf nur eine Person passieren.

Weiterhin mehrere Token hintereinander einfügen (mehreretrue Gegenstände in einem Drehkreuz), ohne dass eine Person vorbeikommt, ist dasselbe, als wenn nur ein einziger Spielstein eingesetzt wird. Das Drehkreuz zählt die Spielsteine nicht.

Das Drehkreuz ist also zunächst geschlossen. Wenn eintrueenn das Element @ darin erscheint, öffnet es sich für eine einzelne Person. Erscheint eine Person, geht sie durch (zum Ausgang) und das Drehkreuz schließt wieder. Wenn einfalseas Element @ erscheint im Drehkreuz, das Drehkreuz schließt sich ebenfalls.

queue       ----A---B-------------C--D--
turnstile   --T--------T--T-T-T-T------T
            ============================
output      ----A------B----------C----D

Ein Marmordiagramm, das zeigt, wie ein offenes Drehkreuz auf eine Person A wartet, dann auf eine Person B, die darauf wartet, dass sich das Drehkreuz öffnet, dann verhalten sich mehrere Spielmarken wie eine Person C, aber Person D muss erneut auf eine neue Spielmarke warten.

----A----B--
--T---T-F-T-
============
----A-----B-

in Marmordiagramm zeigt, wie einfalse Element im Drehkreuz schließt das Drehkreuz wieder.

Jede Hilfe wird gebeten. Ich denke, die einzige Möglichkeit, dies zu implementieren, ohne einen benutzerdefinierten Operator zu schreiben, wäre die Verwendung deszip operator irgendwie, weil es wahrscheinlich der einzige Operator ist, der Elemente aus einer Sequenz auf Elemente aus der anderen warten lässt (oder gibt es andere, die mir nicht bekannt sind?). Aber ich mussnich zip einige der Drehkreuzelemente, je nachdem, ob sie mit einer Person gepaart wurden oder nicht ...

ch halte das für ein interessantes Problem und bin gespannt auf eine gute Lösun

Antworten auf die Frage(4)

Ihre Antwort auf die Frage