2011-02-04 128 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")