gpt4 book ai didi

scala - Iterable[Try[(K, V)]] 到 Try[Map[K, V]]

转载 作者:行者123 更新时间:2023-12-05 01:24:37 26 4
gpt4 key购买 nike

我有一个方法 load 调用起来相对昂贵。为了在加载期间允许某种异常处理,它返回一个Try。我现在需要一个 loadAll 方法的实现,它基本上委托(delegate)给每个给定键的 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)
}

最佳答案

您可以使用折叠来迭代键,并使用 for comprehension 来组合 Try 实例:

def toSet(keys: Traversable[K]): Try[Map[K, V]] = {
keys.toSet.foldLeft( Try( Map.empty[K, V] ) ){ case (tryMap, key) =>
for ( m <- tryMap; v <- load( key ) ) yield m.updated( key, v )
}
}

关于scala - Iterable[Try[(K, V)]] 到 Try[Map[K, V]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16280630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com