我有标准的对象列表,用于某些分析。分析生成一个字符串列表,我需要查看标准的对象列表并检索具有相同名称的对象。
case class TestObj(name:String,positions:List[Int],present:Boolean)
val stdLis:List[TestObj]
//analysis generates a list of strings
var generatedLis:List[String]
//list to save objects found in standard list
val lisBuf = new ListBuffer[TestObj]()
//my current way
generatedLis.foreach{i=>
val temp = stdLis.filter(p=>p.name.equalsIgnoreCase(i))
if(temp.size==1){
lisBuf.append(temp(0))
}
}
还有其他方法可以实现这一目标。就像有一个自定义的indexof方法,可以覆盖并查找名称而不是整个对象或其他内容。我没有尝试过这种方法,因为我不确定。
答案 0 :(得分:3)
stdLis.filter(testObj => generatedLis.exists(_.equalsIgnoreCase(testObj.name)))
答案 1 :(得分:1)
不要使用可变容器来过滤序列。
天真的解决方案:
val lisBuf =
for {
str <- generatedLis
temp = stdLis.filter(_.name.equalsIgnoreCase(str))
if temp.size == 1
} yield temp(0)
如果我们放弃条件temp.size == 1
(我不确定它是否合法):
val lisBuf = stdLis.filter(s => generatedLis.exists(_.equalsIgnoreCase(s.name)))