Mam dwa obserwable:RxJava scalania debounced i nie debounced obserwable
Obserwowalne O (otwarte): Plik z niektórych treści otwarty w TextView
Obserwowalne E (edit): zawartość pliku edytowane w TextView
Chcę wydobyć E obserwowalne i połączyć go z O obserwowalnym.
obs = Observable.merge(E.debounce(2000, TimeUnit.MILLISECONDS) , O)
.subscribe(content->System.out.println("new content: " + content))
Problem polega na tym, że jeśli E emituje zdarzenie E1 i zaraz po tym O emituje zdarzenie O1, mamy wyjścia:
new content: O1
new content: E1 // this output is rebundant (cuz we already have newer content O1)
To jest schemat tego, co się dzieje:
Jak pozbyć się tego przesadnego starego wydarzenia z wyraźnego obserwowalnego?
Dlaczego nie można przenieść operatora 'debounce' z pracy' merge'? –
@TassosBassoukos, Edytuj wydarzenie (E1) jest bardzo częste (w rzeczywistości jest to wydarzenie wpisane kluczem), więc chcę je odrzucić. Jednak gdy otwieram plik, chcę od razu otrzymać wydarzenie O1 bez usuwania. – wilddev
Możesz używać "wersjonowania" na przykład z czasem. Zamapuj swoje obserwowalne zdarzenia O i obserwowalne E (przed odrzuceniem), aby zawierały zarówno treść, jak i czas. Następnie możesz dokonać porównania, jeśli obserwowane zdarzenie E jest "starsze" niż zdarzenie O obserwowalne. Być może będziesz musiał przejść na Observable.combineLatest o acheive that. – krp