如何在等待另一个可流动项发射时发射该项 我使用RXJava3,我有下面的代码设置,我想在中间,在第一个和第二个流之间发射一个项目。有办法吗 firstFlowable.firstElement() //I want to emit an item here .flatMap { secondFlowable.firstElement() }

如何在等待另一个可流动项发射时发射该项 我使用RXJava3,我有下面的代码设置,我想在中间,在第一个和第二个流之间发射一个项目。有办法吗 firstFlowable.firstElement() //I want to emit an item here .flatMap { secondFlowable.firstElement() },java,observable,reactive-programming,rx-java3,Java,Observable,Reactive Programming,Rx Java3,我之所以要这样做,是因为在firstFlowable初始化之后,有一段很长的时间,secondFlowable初始化,我想用一条消息通知UI操作已经开始,我正在等待secondFlowable的数据计算 public static void main(String[] args) { Flowable<String> firstFlowable = Flowable.just("1st", "2nd", "3rd",

我之所以要这样做,是因为在
firstFlowable
初始化之后,有一段很长的时间,
secondFlowable
初始化,我想用一条消息通知UI操作已经开始,我正在等待
secondFlowable
的数据计算

public static void main(String[] args) {
   Flowable<String> firstFlowable = Flowable.just("1st", "2nd", "3rd", "4th", "5th");
   Flowable<String> middleFlowable = Flowable.just("between");
   Flowable<String> secondFlowable = Flowable.just("A", "B", "C", "D");

   firstFlowable.take(1)
                .concatWith(middleFlowable)
                .concatWith(firstFlowable.skip(1))
                .concatWith(secondFlowable)
                .subscribe(System.out::println);

   Flowable.timer(10, SECONDS).blockingSubscribe();  // Just to block the main thread for a while
}

我试图使用
startThitem
,但这在一开始就初始化了我的整个链,但我只想在
firstFlowable
生成其第一个值后才发射。

也许你可以对
firstFlowable
使用
concatWith()
skip()

public static void main(String[] args) {
   Flowable<String> firstFlowable = Flowable.just("1st", "2nd", "3rd", "4th", "5th");
   Flowable<String> middleFlowable = Flowable.just("between");
   Flowable<String> secondFlowable = Flowable.just("A", "B", "C", "D");

   firstFlowable.take(1)
                .concatWith(middleFlowable)
                .concatWith(firstFlowable.skip(1))
                .concatWith(secondFlowable)
                .subscribe(System.out::println);

   Flowable.timer(10, SECONDS).blockingSubscribe();  // Just to block the main thread for a while
}

您可以使用merge注入一个值,然后根据值类型进行操作。如果
secondFlowable
立即完成,您可能希望避免通过
takeUntil
显示字符串

firstFlowable.firstElement()
.flatMap(v->
也许吧,合并(
secondFlowable.firstElement(),
也许吧,只是(“第二个进行中”)
)
)
.takeUntil(v->!(字符串的v实例))
.observeOn(主线程())
.订阅(v->{
if(v instanceof String){
//在此处显示消息
}否则{
//第二组的强制转换和显示结果
}
});

在运行
secondFlowable
时,是否仍要保留
firstFlowable
中的元素?不,我不需要这些元素。从第一个元素开始,我只想为我获取包含相关数据的第一个元素。谢谢你的想法。我最终只使用了合并,因为我不一定喜欢使用flowable发出的项目类型做出的决策,而且我所在的业务上下文不允许该决策(代码片段是真实需求的抽象),但总体思路解决了我的问题。