2014-01-30 32 views
0

我正在尝试在转换项目时找到列表上的项目,以便第一次成功转换将我想要的项目返回给我。所以说,我有以下几点:查找并转换一个scala列表中的项目

def trans(a: A): Option[B] = {...} 

val list: List[A] = List(x, y, z) 

val b: B = list.findAndConvert(a => crit(a)) 

所以我上面的findAndConvert将返回(二)第一次调用一些反式(一),否则返回部分(b)或无。我将如何实现像这样的findAndConvert方法?

感谢 德

回答

2
list.view.map(trans _).find(_.isDefined) 

意见懒洋洋地评估,所以反式将只映射到视图,直到找到返回true。

0

我看不到在哪里定义了crit,并且在您的示例中未调用trans。所以我假设你在这两种情况下的意思是trans

斯卡拉集合非常强大,只需检查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) 
相关问题