Java 为什么map被多次调用?

Java 为什么map被多次调用?,java,android,multithreading,rx-java,rx-java2,Java,Android,Multithreading,Rx Java,Rx Java2,我有以下代码: disposable = Single.fromCallable(() ->fetchData()) .map(myObject::doUpdate) .subscribeOn(mySingleThreadScheduler) .observeOn(AndroidSchedulers.mainThread()) .doOnSuccess(consu

我有以下代码:

disposable = Single.fromCallable(() ->fetchData())
                .map(myObject::doUpdate)
                .subscribeOn(mySingleThreadScheduler)
                .observeOn(AndroidSchedulers.mainThread())
                .doOnSuccess(consumer)
                .subscribe(myFunction, failConsumer);  
我看到的是:
fetchData()
myObject::doUpdate
由我预期的同一个线程调用(基于线程名称/线程id)。
但是
myObject::doUpdate
us调用了不止一次,在第二次调用中,它就像是在运行
fetchData
之前获取输入一样。
为什么?

如果您查看ReactiveX
map
操作符的官方文档和附带的大理石图,您可以看到map函数对每个输入都执行

因此,如果要同时使用所有可用元素执行函数,就不能依赖它


使用
map
操作符,您可以对每个元素应用一个单独执行的转换。

您能否提供一个最小但完整的示例,以便我们可以复制它?@marstran:这非常困难,因为我是Java rx新手,不知道如何提取相关内容,使其成为一个可复制的示例。我能说的是,
fetchData
返回一个
List
myObject::doUpdate
获取该列表作为输入参数,并返回一个自定义对象,该对象将该列表作为成员。我怀疑一旦
map
以某种方式返回,结果就是
map
pagain@marstran:事实上,我验证了它被调用的次数与输入的
列表的
大小
一样多。Jim请提供完整的代码或至少是方法的签名
fetchData()
myObject::doUpdate
?那么,如果map不是正确的解决方案,我该如何做我需要的事情呢?使用
onUpdate
函数,您想实现什么?何时调用该函数?“映射函数对每个输入执行”-是的,但从Jim发布的代码中只有一个输入-列表。map函数获取一个对象,然后返回另一个对象。代码中似乎没有任何东西会导致列表被迭代(即,代码永远不应该输入大理石“2”,那么为什么会执行输出大理石“20”)-是这样吗@Jim?@racraman您是对的,我们可能需要查看
fetchData
代码