¿Cómo iterar sobre Single <List> y asignar a otra list?

como resultado de la request de actualización obtengo Single<List<Info>> Debo iterar sobre cada elemento y, en function de cada ID de elemento, debo llamar a otra request que también es Single Y luego asignarme a DetailInfo
y como resultado tener Single<List<DetailInfo>>

Encontré flattenAsObservable y flattenAsFlowable, no estoy seguro de usarlo, es el enfoque correcto; si es así, tengo otro problema. Recibo Single<List<Single<DetailInfo>> mientras que necesito tener Single<List<DetailInfo>>

 fun recipeInfos(id: Long) { return repository.recipeInfos(id) .flattenAsObservable { it -> it.map { it ->it.id } }.map { id ->repository.detail(id) .map { detailInfo -> detailInfo.toModel() }} .toList() }