2011-02-04 47 views
3

什么是这样做的惯用斯卡拉方式?我有一个列表,并且如果我找到与某些条件相匹配的东西,则返回“Y”,否则返回“N”。我有一个解决方案, “作品”,但我不喜欢它... ...搜索匹配属性的东西的斯卡拉列表

def someMethod(someList: List[Something]) : String = { 

someList.foreach(a => 
    if (a.blah.equals("W") || a.bar.equals("Y")) { 
    return "Y" 
    } 
) 
    "N" 


} 
+0

你在说什么这里这不是真的清楚。你的意思是说所有的元素都应该是“W”或“Y”以返回“Y”,否则它应该返回“N”? – 2011-02-04 16:16:54

+0

不,我只想找到1个匹配,然后做一个Y ..否则N如果不匹配 – bwawok 2011-02-04 17:09:19

回答

11

Simples:

if (someList.exists{ a=> a.blah == "W" || a.bar == "Y"}) 
    "Y" 
else 
    "N" 
8
def condition(i: Something) = i.blah.equals("W") || i.bar.equals("Y") 

somelist.find(condition(_)).map(ignore => "Y").getOrElse("N") 

或者干脆

if (somelist exists condition) "Y" else "N" 
1
val l = List(1,2,3,4) 

(l.find(x => x == 0 || x == 1)) match { case Some(x) => "Y"; case _ => "N"} 
res: java.lang.String = Y 
2

假设的东西有嗒嗒成员。

def someMethod(someList: List[Something]): String = 
    if (someList forall { a => a.blah == "W" || a.blah == "Y" }) "Y" else "N" 
+0

在scala中安全地使用两个字符串==?它不会在Java中。...... – bwawok 2011-02-04 16:40:10

0

假设Something罐模式匹配,例如当它是一个案例类像...

case class Something(blah:String, bar:String) 

...你可以写......

def someMethod(someList: List[Something]) = someList.collect{ 
    case Something("W",_) | Something(_,"Y") => "Y"}.headOption.getOrElse("N")