Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将多个观测值合并到一个源_Java_Android_Kotlin_Rx Java_Rx Java2 - Fatal编程技术网

Java 将多个观测值合并到一个源

Java 将多个观测值合并到一个源,java,android,kotlin,rx-java,rx-java2,Java,Android,Kotlin,Rx Java,Rx Java2,我有很多网络调用,它们发出不同的类型,例如string、int等等 我正在努力使它们平行 在官方rxjava文档中,我们可以阅读: Flowable.range(1, 10) .parallel() .runOn(Schedulers.computation()) .map(v -> v * v) .sequential() .blockingSubscribe(System.out::println); 这个例子很简单,因为我们所有的类型都是Int。但是如果我们有不

我有很多网络调用,它们发出不同的类型,例如string、int等等

我正在努力使它们平行

在官方rxjava文档中,我们可以阅读:

Flowable.range(1, 10)
  .parallel()
  .runOn(Schedulers.computation())
  .map(v -> v * v)
  .sequential()
  .blockingSubscribe(System.out::println);
这个例子很简单,因为我们所有的类型都是Int。但是如果我们有不同的类型,比如string,boolean,Int,怎么做呢

  • 这5个电话都是独立的
  • 这5个调用的组将在一个方法中,而此方法将由另一个随机方法调用
  • 我们可以假设,5次调用的结果将是第一次调用的类型->
    string

组合观测值

使用多个源观测值创建单个观测值的运算符

  • 和/然后/当-通过模式和计划中介组合两个或多个可观察对象发出的项目集

  • CombineTest-当一个项目由两个可观察对象中的任何一个发出时,通过指定函数组合每个可观察对象发出的最新项目,并基于此函数的结果发出项目

  • 连接-在根据另一个可观察对象发出的项目定义的时间窗口内,当一个可观察对象发出一个项目时,组合两个可观察对象发出的项目

  • 合并-通过合并多个观测值的发射,将其合并为一个

  • StartWith-在开始从可观测源发射项目之前,发射指定的项目序列

  • 开关-将发出可观测值的可观测值转换为发出最近发出的可观测值项的单个可观测值

  • Zip-通过指定函数将多个观测值的发射组合在一起,并根据该函数的结果为每个组合发射单个项目

我认为您可以使用
zip
CombineTest

阅读本文件

我想你也需要知道

RxJava调度程序简介

  • Schedulers.io()–它用于执行非CPU密集型操作,如进行网络调用、读取光盘/文件、数据库操作等,它维护一个线程池

  • Schedulers.newThread()–使用它,每次调度任务时都会创建一个新线程。通常建议不要使用调度程序,除非有一个非常长的运行操作。通过newThread()创建的线程将不会被重用

  • 调度程序。计算()–此调度程序可用于执行CPU密集型操作,如处理海量数据、位图处理等,使用此调度程序创建的线程数完全取决于可用的CPU内核数

  • 调度程序。single()–此调度程序将按添加的顺序执行所有任务。当需要顺序执行时,可以使用此选项

  • Schedulers.immediate()–此计划程序通过阻塞主线程以同步方式立即执行任务

  • Schedulers.trampoline()–它以先进先出的方式执行任务。通过将后台线程数限制为一个线程,将逐个执行所有计划任务

  • Schedulers.from()–这允许我们通过限制要创建的线程数量,从执行器创建调度器。当线程池被占用时,任务将排队


我认为这个问题缺少一些信息:哪个事件触发了相互呼叫?多次呼叫的结果是什么?我想是将它们合并到一个对象中?Flowable并不是Rx中触发parralelism的唯一解决方案。我添加了很多额外的信息,我正试图使用zip或CombineTest来实现这一点,这看起来很好,但工作时间与异步样式完全相同或更相似,因此这种并行方式不起作用。我在堆栈上找到了一个答案,其中包含信息,我们不能使用zip或CombineTest:我经常使用它,我认为您使用它是错误的,您应该阅读链接中的注释或其他答案,flatMap just concat observebles表示新的可观察值,请等到上一个发射值时再调用它们。如果它不适合你,我想这是因为你使用了错误的调度程序阅读此链接