我正在尝试在转换项目时在列表中找到项目,以便第一次成功转换返回我想要的项目。所以说我有以下内容:
def trans(a: A): Option[B] = {...}
val list: List[A] = List(x, y, z)
val b: B = list.findAndConvert(a => crit(a))
所以上面的findAndConvert会返回Some(b),第一次调用trans(a),返回Some(b)或None。我将如何实现像这样的findAndConvert方法?
由于 DES
答案 0 :(得分:2)
list.view.map(trans _).find(_.isDefined)
视图被懒惰地评估,因此trans只会映射到视图,直到find返回true。
答案 1 :(得分:0)
我看不到定义crit
的位置,并且在您的示例中未调用trans
。所以我假设你在两种情况下都是trans
?
Scala集合非常强大,如果找到合适的函数,只需检查API文档即可。例如,find()
看起来不错。
def trans(a: String):Option[Int] = {
val r = Integer.valueOf(a);
if (r > 3) Some(r)
else None
}
val listA = List("1", "3", "2")
val listB = List("1", "5", "2")
listA.find(!trans(_).isEmpty) // => Option[java.lang.String] = None
listB.find(!trans(_).isEmpty) // => Option[java.lang.String] = Some(5)