Как соблюдать порядок обратной зависимости?
Я хотел бы наблюдать за деревом объектов в обратном порядке зависимости, но не знаю, какие комбинаторы использовать. В конкретном случае выполняется перебор ресурсов AWS для удаления, например, удаление объектов S3 перед удалением их блоков S3, например:
val S3 = new AmazonS3Client
val buckets = Observable.from {
S3.listBuckets.asScala
}
val objects = buckets.flatMap { b => Observable.from(
S3.listObjects(new ListObjectsRequest().withBucketName(b.getName))
.getObjectSummaries
.asScala)
}
val combined:Observable[_] = ???
for (thing <- combined) thing match {
case b:Bucket => println("delete bucket")
case o:S3ObjectSummary => println("delete object")
}
Итак, финал combined
Наблюдаемые должны испускать все объекты, прежде чем испускать ведро. Какой комбинатор я должен использовать для этого?
1 ответ
Решение
Вы можете добавить b
до конца своих объектов, например,
val objects = buckets.flatMap { b => Observable.from(
S3.listObjects(new ListObjectsRequest().withBucketName(b.getName))
.getObjectSummaries
.asScala) :+ b
}