邮编列表已完成



我有一个包含媒体播放器的类Sound,我想写一个函数来接收声音列表并播放所有声音,该函数应该返回复杂

interface MediaPlayer {
fun play(): Completable
}
class Sound(val title, val mediaPlayer: MediaPlayer)
//In other class, we have a list of sound to play
val soundList = List<Sound>(mockSound1, mockSound2,..,mockSound10)
fun playSound(): Completable {
return mockSound1.play()
}
fun playAllSounds(): Completable {
soundList.forEach(sound -> sound.mediaPlayer.play()) //Each of this will return Completable. 
//HOW to return Completable
return ??? do we have somthing like zip(listOf<Completable>)
}

//USE
playSound().subscrible(...) //Works well
playAllSounds().subscribe()???

您可以从文档使用concat

返回一个Completable,该表只有在所有源相继完成时才完成。

您可以执行以下操作:

fun playAllSounds(): Completable {
val soundsCompletables = soundList.map(sound -> sound.mediaPlayer.play())
return Completable.concat(soundCompletables)
}

参考编号:http://reactivex.io/RxJava/javadoc/io/reactivex/Completable.html#concat-java.lang.Iterable-

您可以尝试Completable.merge。它将同时订阅所有Completables。这是文档的链接

最新更新