我有一个load
调用起来相对昂贵的方法。为了在加载过程中允许某种异常处理,它返回一个Try
. 我现在需要一个loadAll
方法的实现,它基本上委托给load
每个给定的键。这是我的第一种方法,但是我不知道这是否是与Try
. 有没有更好的方法来实现以下目标?
def load(key: K): Try[V] // very expensive
def loadAll(keys: Traversable[K]): Try[Map[K, V]] = {
// remove duplicate keys
val ukeys = Set.empty ++ keys
val result: Iterable[Try[(K, V)]] = ukeys map { key =>
load(key) match {
case Success(value) => Success(key, value)
case Failure(exception) => Failure(exception)
}
}
Try(result.map { _.get }.toMap)
}