【问题标题】:How can I use .doOnNext() with Action2 (RxJava)如何将 .doOnNext() 与 Action2 (RxJava) 一起使用
【发布时间】:2016-03-15 00:10:09
【问题描述】:

Observables 只发出一个对象,所以doOnNext() 总是用Action1 调用。如何以类似的方式使用Action2

我可以将 2 个 observables 组合成一个 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());       
        };
    }

【问题讨论】:

  • 您为什么要这样做?你的用例是什么?
  • 你需要更清楚地解释你在问什么。
  • 你说“我为什么要这样做?”但我不知道你所说的“这个”是什么意思。你能解释一下Action1Action2的意思吗?他们的类型是什么?你是什​​么意思可观察者可以调用它们?等等等等等等……
  • @Enigmativity 我想我想模拟.withLatestFrom(),但作为Action2 而不是Func2。我想这是不可能的?
  • @ZakTaccardi - 我还是不明白你的意思。你能解释你想做什么吗?

标签: java rx-java system.reactive


【解决方案1】:

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

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

这在大多数使用 Rx 的语言(C#、F#、JS、Scala)中都很简单,但在 Java 中,您可能必须实际声明/定义一个类型才能做到这一点。见-A Java collection of value pairs? (tuples?)

*请尽量避免使用Do 副作用运算符。几乎总是有更好的方法。在您的示例中,您似乎在该处理程序中做了一些重要的工作(创建、添加和删除我认为是可视控件的选项卡)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多