Как соблюдать порядок обратной зависимости?

Я хотел бы наблюдать за деревом объектов в обратном порядке зависимости, но не знаю, какие комбинаторы использовать. В конкретном случае выполняется перебор ресурсов 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
}
Другие вопросы по тегам