我有一个方法load
,这是相对昂贵的调用。为了在加载期间允许某种异常处理,返回Try
。我现在需要一个针对loadAll
方法的实现,该方法对于给定的每个键基本上委托load
。这是我的第一个方法,但是我不知道这是否与Try
有关的最佳实践。有没有更好的方法来实现以下目标?Iterable [尝试[(K,V)]]尝试[地图[K,V]]
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)
}
谢谢!它应该被映射为'Tuple [K,V]'作为'(k,load(k).get)'。我是对的,它迭代了3次以上的键(toSet','map'和'toMap')? – 2013-04-30 05:59:55
@ManuelSchmidt - 我已经调整了答案以返回一个元组。这在键上重复三次;如果'load'昂贵,那么你不关心,因为'load'主宰了所有其他的捣蛋。 – 2013-04-30 14:22:20