Future[Try[Option[Map[String, Any]]]]
Это перебор, потому что результат оценки будущего уже выглядит как попытка. Итак, пусть у вас есть такое будущее, тогда самый простой способ - это использовать Await.result и затем прорезать стек типов:
Future<Try<Option<Map<String, Any>>>> yourFuture = yourFunc(...);
scala.concurrent.duration.FiniteDuration timeout = new FiniteDuration(..., ...);
/*simplest, but not the best way of doing so, it will throw an exception if something goes wrong, you probably want to wrap this in try-catch block in real code*/
Try<Option<Map<String, Any>>> result = Await.result<Try<Option<Map<String, Any>>>>(yourFuture, timeout);
if(result.isSuccess()){
Option<Map<String, Any>> option = result();
if(option.nonEmpty()){
Map<String, Any> mapYouNeed = option.get();
} else {
// throw your exception
}
} else {
// throw your exception
}
Больше информации о Futures и Await в scala документах. https://www.scala-lang.org/api/2.12.9/scala/concurrent/Await $. html