Ich möchte in der Lage sein, Klickmultiplizität zu erkennen.
Im letzten Schritt gibt es eine Flux-Pipeline:
Code: Select all
final Flux buttonStream = stateStream.getButtonFlux()
.mapNotNull(GamepadIntrospector::introspect)
.filter(Predicate.not(List::isEmpty))
.map(EventMapper::translateButtonTimed)
.filter(notFizzy)
;
Code: Select all
01:08:09.696 [pool-1-thread-1] INFO org.asmus.Main -- QualifiedEType(type=A, pressType=CLICK)
01:08:09.873 [pool-1-thread-1] INFO org.asmus.Main -- QualifiedEType(type=A, pressType=DOUBLE)
01:08:10.016 [pool-1-thread-1] INFO org.asmus.Main -- QualifiedEType(type=A, pressType=TRIPLE)
Was ich mit dieser Pipeline lösen muss, ist, nur zu haben letztes Ereignis in der Ausgabe.
Ich möchte kein Zeitfenster-Sampling, das beim Ausführen des Programms startet, um es abzutasten und mir das letzte in dieser Zeitspanne zu liefern. Ich denke, das kann man so machen:
Code: Select all
final Flux buttonStream = stateStream.getButtonFlux()
.mapNotNull(GamepadIntrospector::introspect)
.filter(Predicate.not(List::isEmpty))
.map(EventMapper::translateButtonTimed)
.filter(notFizzy)
.bufferTimeout(3, Duration.ofMillis(300))
.map(e -> e.size() == 1 ?
e.getFirst() : e.getLast())
;
Ich möchte, dass diese Pipeline einige Zeit, sagen wir 80 ms, wartet, nachdem das erste Ereignis empfangen wurde, und wenn nichts anderes kommt, gibt sie das Ereignis aus (es wäre bereits mit seiner Multiplizität durch die oben erwähnte Mapper-Komponente festgelegt); Wenn innerhalb dieser Zeitspanne weitere hinzukommen, wird die letzte aus dieser Kette ausgegeben und so weiter.
Nachdem ich also 3x die Taste „A“ gedrückt habe, möchte ich nur noch erhalten
Code: Select all
01:08:10.016 [pool-1-thread-1] INFO org.asmus.Main -- QualifiedEType(type=A, pressType=TRIPLE)
Außerdem muss diese Kette dies tun Berücksichtigen Sie den Schaltflächentyp, daher kann das Timing von QualifiedEType(type=A, pressType=...) QualifiedEType(type=X, pressType=...)
Wie kann das gemacht werden? Ideal wäre eine clevere Flux-Operatorkette, aber alles reicht...
io.projectreactor:reactor-core:3.6.5
Danke!
Mobile version