2016-03-15 3 views
-1

Наблюдаемые только излучают один объект, поэтому doOnNext() всегда вызывается с Action1. Как я могу использовать Action2 аналогичным образом?Как использовать .doOnNext() с Action2 (RxJava)

Могу ли я объединить 2 наблюдаемых вызова Action2?

EDIT: Почему я хочу это сделать? Я работаю над заказом. У меня есть мнение, что для правильного отображения ему нужны две части данных (1: tip% и 2: общая стоимость). Поэтому, если бы это представление могло реагировать на наблюдаемую последовательность как Action2, я был бы счастлив.

EDIT2: Ниже приведен метод, описанный ранее. Если бы это был Action1, я мог бы легко назвать его, как я делаю с .doOnNext(). Существуют ли операторы, которые могут работать аналогично .doOnNext(), но взять параметр Action2 в качестве параметра? Может быть, что-то вроде withLatestFrom(), которое принимает Action2 вместо Func2?

public Action2<Money, List<Integer>> displayGratuityOptions() { 
     return (subtotal, gratuityPercents) -> { 
      removeAllTabs(); 
      for (final Integer percent : gratuityPercents) { 
       addTab(createTab(subtotal, percent)); 
      } 
      addTab(createCustomGratuityTab());  
     }; 
    } 
+0

Зачем вам это нужно? Каков ваш прецедент? – akarnokd

+0

Вам нужно объяснить немного более четко, что вы просите. – Enigmativity

+0

Вы говорите: «Зачем мне это делать?» но я не знаю, что вы подразумеваете под этим «этим». Не могли бы вы объяснить, что вы подразумеваете под «Action1» и «Action2»? Каковы их типы? Что вы имеете в виду, что наблюдаемый может их назвать? и т. д. и т. д. и т. д. ... – Enigmativity

ответ

0

Операторы, такие как withLatestFrom, могут комбинировать несколько последовательностей в одну последовательность. Я думаю, вам будет лучше работать с Rx, если вы сможете принять этот способ мышления, то есть отдельные последовательности типов данных.

С этой целью я предлагаю создать тип, который имеет оба типа данных, которые вы хотите. Затем вы можете объединить свои данные и передать одно значение своему обработчику doOnNext *.

Это простой материал на большинстве языков, в котором Rx используется (C#, F #, JS, Scala), но в Java вам может потребоваться фактически объявить/определить тип, чтобы сделать это. См. - A Java collection of value pairs? (tuples?)

* Пожалуйста, старайтесь избегать использования операторов побочных эффектов Do. Существует почти всегда лучший способ. В примере вы видите, что вы выполняете значительную работу над этим обработчиком (создание, добавление и удаление вкладок, которые я предполагаю, являются визуальными элементами управления)

Смежные вопросы