我正在尝试在 Scala 中构建理解,但是当我尝试使用更复杂的过滤器时遇到了一些问题。
我知道理解过滤的基本知识:
for (x <- 1 until 20 if x>3) yield {
x
}
但是,我想构建一个具有更复杂过滤语句的 for comprehension。例如,这是我正在尝试做的说明性版本:
for (
element <- elementList
val otherElement = databaseCall.getMatching(element.id)
if element.name==otherElement.name
) yield {
element
}
基本上,如果你想用一些更复杂的要求做一个过滤器,这会变得很尴尬,因为 for 理解不允许在过滤器语句中声明 val,否则你必须将所有这些都放在一行中。
另一种选择是根本不使用过滤器机制,只产生 Some(element) 或 None,并最终得到一个 Option[elementType] 列表。但是,在这种情况下,我不想使用 Optional 类型。
当务之急,我只是创建一个可变列表,并且仅在满足我的条件时才附加到列表中,但我想看看如何以更多的声明方式来做到这一点(不是所有的声明方式,但我我还在学习!)。
任何关于好的声明性方法的建议都会非常有帮助。