2011-02-04 10 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

あるとき。 "Y"を返すにはすべての要素を "W"または "Y"にし、それ以外の場合は "N"を返さなければならないと言っていますか? –

+0

いいえ、私はちょうど1つのマッチを見つけてYをしたいです。他の場合はNマッチしない場合は – bwawok

答えて

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

最も簡単な:例えば、Something缶パターンマッチを仮定

if (someList.exists{ a=> a.blah == "W" || a.bar == "Y"}) 
    "Y" 
else 
    "N" 
+0

あなたが 'idomatic'を探しているなら、.equals(...)の代わりに==を使うことをお勧めします。 –

+0

もっと慣用的に編集: – bwawok

+1

Ta。私はちょうど切断され、質問から条件を貼り付けました。それは常に等しいことができますストレートの文字列の比較をしない... –

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

が好きではありません。

+0

スカラーで2つの文字列の間に==を使用していますか?それはJavaにはありません.... – bwawok

+0

プラスはすべての値に対してtrueを返さなければならないということを意味しませんか?私は1つのマッチだけを望みます – bwawok

+1

== Scalaの文字列には正しいことがあります。 –

0

それはケースクラスのような...

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

...あなたが書くことができます...あなたがここで言っていることは本当にはっきりしない

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