下面的代码比较了两个列表,如果另一个列表中包含一个元素,则输出该元素:
var containList = new scala.collection.mutable.ListBuffer[String]()
//> containList : scala.collection.mutable.ListBuffer[String] = ListBuffer()
val lines2 = List("2", "3", "4") //> lines2 : List[String] = List(2, 3, 4)
for (l <- lines2) {
isStringInFile(l)
}
def isStringInFile(str: String) = {
val lines = List("115", "t2t", "3")
for (l2 <- lines) {
if (l2.contains(str)) {
containList += l2
}
}
} //> isStringInFile: (str: String)Unit
for (c <- containList) {
println(c) //> t2t
//| 3
}
这是一个必不可少的解决方案。但是有功能实现吗?
答案 0 :(得分:1)
有多种方法可以做到这一点
scala> val lines2 = List("2", "3", "4")
lines2: List[String] = List(2, 3, 4)
scala> val lines = List("115", "t2t", "3")
lines: List[String] = List(115, t2t, 3)
scala> lines2.filter(lines.contains(_))
res1: List[String] = List(3)
另一种方法
scala> lines.intersect(lines2)
res2: List[String] = List(3)
答案 1 :(得分:1)
我喜欢 @mohit 的解决方案,但您的预期结果与他的预期结果不同。所以这段代码就是你的例子:
val lines2 = List("2", "3", "4")
val lines = List("115", "t2t", "3")
val result = for {l <- lines
l2 <- lines2
if l.contains(l2)
} yield l
result.foreach(println)
输出:
t2t
3