Java 在列表中搜索与属性匹配的内容

Java 在列表中搜索与属性匹配的内容,java,scala,Java,Scala,scala的惯用方法是什么?我有一个列表,如果我找到符合某些条件的内容,我想返回一个“Y”,否则返回一个“N”。我有一个“有效”的解决方案,但我不喜欢它 def someMethod( someList: List[Something]) : String = { someList.foreach( a => if (a.blah.equals("W") || a.bar.equals("Y") ) { return "Y" } ) "N" } 或者干脆 if

scala的惯用方法是什么?我有一个列表,如果我找到符合某些条件的内容,我想返回一个“Y”,否则返回一个“N”。我有一个“有效”的解决方案,但我不喜欢它

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

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


}
或者干脆

if (somelist exists condition) "Y" else "N"

假设某个东西有一个无聊的成员

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

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

假设
某个东西
可以匹配模式,例如,当它是一个case类,如

case class Something(blah:String, bar:String) 
。。。你可以写

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

你在这里说什么还不太清楚。你的意思是说所有元素都应该是“W”或“Y”才能返回“Y”,否则它应该返回“N”吗?不,我只想找到一个匹配项,然后再做一个Y。。否则,如果没有matchesPlus,则N不表示它必须为所有值返回true?我只想要1个match==对Scala中的字符串做正确的事情。我仍然对您想要实现的目标有点困惑,但您的意思是,如果至少有一个东西的blah值为“W”或“Y”,那么您期望“Y”,然后简单地将forall替换为exists。我想OP希望使用
exists
而不是
forall
。如果您正在寻找“idomatic”,那么我建议使用==而不是.equals(…).Ta。我只是把问题中的条件剪贴了一下。总是有可能equals不做直字符串比较。。。
case class Something(blah:String, bar:String) 
 def someMethod(someList: List[Something]) = someList.collect{
   case Something("W",_) | Something(_,"Y") => "Y"}.headOption.getOrElse("N")