我正在寻找Scala语法,用于使用比较将其附加到ArrayBuffer。我有两种不同类型的两个数组,所以我不能简单地使用交集。本质上,这就是我要寻找的:
val allPeople : ArrayBuffer[Person] = ...
val result = ArrayBuffer[Person]()
val acceptableAges : ArrayBuffer[Age] = ...
// Simplify below
for (p <- allPeople if acceptableAges.indexof(p.age) >= 0)
result.append(p)
是否有一个时尚的解决方案? Scala的新手。
答案 0 :(得分:1)
请避免尽可能多地使用可变变量(这会花费时间,但每次看到可变var
时都要自问)。有 scala 和 fp 。
您正在寻找的是.filter
函数。
以下是示例
scala> final case class Age(age: Int)
defined class Age
scala> final case class Person(name: String, age: Age)
defined class Person
给出:
scala> val allPeople = List(Person("prayagupd", Age(100)), Person("steven wilson", Age(200)))
allPeople: List[Person] = List(Person(prayagupd,Age(100)), Person(steven wilson,Age(200)))
scala> val acceptableAges : List[Age] = List(Age(100), Age(150))
acceptableAges: List[Age] = List(Age(100), Age(150))
使用.filter
过滤您的数据:
scala> allPeople.filter(p => acceptableAges.contains(p.age))
res2: List[Person] = List(Person(prayagupd,Age(100)))