我有一个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-
关于android - zip 列表可填写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53616800/