У меня есть метка, на которой отображаются сообщения об ошибках. Если вы дважды щелкните по нему, вы получите большой диалог, показывающий всю трассировку стека. У меня есть два наблюдаемые: один для ошибок и один для событий щелчка:Объединить наблюдаемые события качания с другими наблюдаемыми
final ConnectableObservable<Notification> errorNotifications = pm
.getNotificationObservable()
.filter(notification -> notification.getType().isError() && !notification.getLongMessage().isEmpty())
.replay(1);
errorNotifications.connect();
SwingObservable.fromMouseEvents(dialog.getMessagePanel().getMessageLabel())
.map(MouseEvent::getClickCount)
.filter(number -> number >= 2)
.subscribe(integer -> errorNotifications
.take(1)
.subscribe(notification -> ErrorDialog.showError(dialog.getFrame(), "Error", notification.getLongMessage())));
Я отфильтровывать уведомление наблюдаемого, чтобы показывать только erros и переигрываюсь последней ошибкой, если я подписываюсь из него изнутри моей мыши наблюдаемой.
Теперь, мой вопрос: есть ли какие-либо операторы в RxJava, с помощью которых я могу сделать это более ... аккуратно? Я попытался использовать combineLatest()
, но это повлияло на то, что каждый раз при открытии диалогового окна открывается ошибка.
В более абстрактном виде: у меня есть два наблюдаемых, один из них «хозяин»: если наблюдаемый мастер (щелчок по наблюдаемому) испускает элемент, другой наблюдаемый (мои уведомления об ошибках) должен испускать последний элемент.
flatMap, кажется, работает, но я не уверен, если я понимаю основную технологию: Так ReplaySubject будет выдавать последний элемент на subscript, что означает, что flatMap() также подписывается на результат, наблюдаемый из переданной функции сопоставления ...? – morpheus05
flatMap объединит весь результат из наблюдаемых, что ваш лямбда-возврат. Таким образом, с помощью Replaysubject вы будете уведомлены о последних событиях и последующих событиях. С помощью оператора take вы будете уведомлены каждый раз только о последних событиях. – dwursteisen