如何在Action2(RxJava)中使用.doOnNext()

时间:2016-03-15 00:10:09

标签: java rx-java system.reactive

Observable只发射一个对象,因此始终使用Action1调用doOnNext()。我怎样才能以类似的方式使用Action2

我可以组合2个可观察者来调用Action2吗?

编辑:我为什么要这样做?我正在制作一个结帐应用。我认为,为了正确显示,它需要两个数据(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());       
        };
    }

1 个答案:

答案 0 :(得分:0)

withLatestFrom这样的运算符可以将多个序列组合成一个序列。如果您能采用这种思维方式,即单一数据类型序列,我认为您将更适合使用Rx。

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

在大多数语言中,这是Rx用于(C#,F#,JS,Scala)的简单内容,但在Java中,您可能必须实际声明/定义类型才能执行此操作。见 - A Java collection of value pairs? (tuples?)

*请尽量避免使用Do副作用运算符。几乎总有一种更好的方法。在您的示例中,看起来您正在该处理程序中执行一些重要工作(创建,添加和删除选项卡,我假设它们是可视控件)