Поиск в списке scala для чего-то соответствующего свойства - PullRequest
3 голосов
/ 04 февраля 2011

Какой идиоматический способ это сделать? У меня есть список, и я хочу вернуть «Y», если найду что-то, соответствующее некоторым условиям, иначе - «N». У меня есть решение, которое «работает», но мне оно не нравится ...

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

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


}

Ответы [ 5 ]

11 голосов
/ 04 февраля 2011

Simples:

if (someList.exists{ a=> a.blah == "W" || a.bar == "Y"}) 
   "Y"
else 
   "N"
8 голосов
/ 04 февраля 2011
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"
2 голосов
/ 04 февраля 2011

Предполагая, что у Нечто есть бла член.

def someMethod(someList: List[Something]): String = 
  if (someList forall { a => a.blah == "W" || a.blah == "Y" }) "Y" else "N"
1 голос
/ 04 февраля 2011
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
0 голосов
/ 04 февраля 2011

Предполагая, что Something может соответствовать шаблону, например, когда это класс случая, подобный ...

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

... вы можете написать ...

 def someMethod(someList: List[Something]) = someList.collect{
   case Something("W",_) | Something(_,"Y") => "Y"}.headOption.getOrElse("N")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...