Java 在列表中搜索与属性匹配的内容
scala的惯用方法是什么?我有一个列表,如果我找到符合某些条件的内容,我想返回一个“Y”,否则返回一个“N”。我有一个“有效”的解决方案,但我不喜欢它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
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")