Android Zip列表可完成

Android Zip列表可完成,android,rx-java,Android,Rx Java,我有一个类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>(

我有一个类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()???
接口媒体播放器{
趣味游戏():可完成
}
类声音(val标题,val mediaPlayer:mediaPlayer)
//在另一节课上,我们有一个要播放的声音列表
val soundList=List(mockSound1、mockSound2、…、mockSound10)
趣味playSound():可完成{
返回mockSound1.play()
}
趣味playAllSounds():可完成{
soundList.forEach(sound->sound.mediaPlayer.play())//每一个都将返回Completable。
//如何返回Completable
返回???我们有类似zip(列表)的东西吗
}
//使用
playSound().subscrible(…)//运行良好
播放所有声音()。订阅()???

您可以使用文档中的
concat

返回一个Completable,该表仅在所有源逐个完成时完成

您可以执行以下操作:

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

参考:

您可以使用文档中的
concat

返回一个Completable,该表仅在所有源逐个完成时完成

您可以执行以下操作:

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

Ref:

您可以尝试
Completable.merge
。它将一次订阅所有的Completable。
这是您可以尝试
Completable.merge
。它将一次订阅所有的Completable。
这是答案

我认为这个答案不正确
concat
在前一个完成后订阅每个可完成的
Completable
。这对应于一系列的订阅。我认为这个答案不正确
concat
在前一个完成后订阅每个可完成的
Completable
。这对应于一系列订阅