Допустим, есть N событий. Могу ли я что-то сделать, когда происходит событие E, где E - это событие в N событиях, но только после того, как каждое из событий произошло хотя бы один раз, и использовать последний результат для каждого события?
Я попробовал код ниже, ожидая, что результат будет таким же, как в комментариях
val o1 = PublishSubject.create<String>();
val o2 = PublishSubject.create<String>();
val o3 = PublishSubject.create<String>();
Observable.zip(o1,o2,o3,
Function3<String, String, String, Array<String>> { t1, t2, t3 -> arrayOf(t1,t2,t3); })
.observeOn(Schedulers.computation())
.subscribe { t1 ->
Log.d("so", "Result = " + t1.joinToString(" "));
}
o1?.onNext("homer"); //o2 and o3 have not been ready.
Thread.sleep(1000);
o1?.onNext("bart"); //o2 and o3 have not been ready.
Thread.sleep(1000);
o3?.onNext("doughnut"); //o2 has not been ready.
Thread.sleep(1000);
o2?.onNext("loves"); //at this point, print "Result = bart loves doughnut".
//The last value of o1 is "bart",
//and the last value of o3 is "doughnut"
Thread.sleep(1000);
o1?.onNext("marge"); //marge loves doughnut
Thread.sleep(1000);
o2?.onNext("hates"); //marge hates doughnut
Thread.sleep(1000);
o3?.onNext("pie"); //marge hates pie
Thread.sleep(1000);
o3?.onNext("cake"); //marge hates cake
Thread.sleep(1000);
o2?.onNext("sees"); //marge sees cake
Thread.sleep(1000);
Log.d("so", "Done");
Но фактический результат был
Result = homer loves doughnut
Result = bart hates pie
Result = marge sees cake
Done