2016-03-15 79 views
-1

观测量只能发出一个对象,所以doOnNext()总是调用的Action1。我怎样才能以类似的方式使用Action2如何使用.doOnNext()与措施2(RxJava)

我可以结合2个观测叫Action2

编辑:我为什么要这样做?我正在开发一个结帐应用程序。我有一个观点,为了正确显示,它需要两条数据(1:提示%和2:总成本)。所以如果这个观点可以对一个可观察的序列作出反应,我会很高兴。

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合作。

为此,我建议创建一个具有所需数据类型的类型。然后,您可以合并您的数据,然后将单个值传递给您的处理程序*。

这是是R x为在最常用的语言(C#,F#,JS,斯卡拉),但在简单的Java的东西,你可能有实际声明/定义一个类来做到这一点。请参阅 - A Java collection of value pairs? (tuples?)

*请尽量避免使用Do副作用操作员。几乎总是有一个更好的方法。在您例如,它看起来像你正在做一些显著工作,在处理(创建,添加和删除我以为是视觉控制选项卡)