查找并转换标量列表中的项目

时间:2014-01-30 13:43:10

标签: scala

我正在尝试在转换项目时在列表中找到项目,以便第一次成功转换返回我想要的项目。所以说我有以下内容:

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

2 个答案:

答案 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)