[英]Converting Imperative Expressions to Functional style paradigm
我的代码中包含以下Scala代码段。 我无法将其转换为功能样式。 我可以在代码的其他位置执行此操作,但无法将以下内容更改为功能。 问题是,一旦代码用尽了所有模式匹配选项,那么只有它应该发回“ NA”。 下面的代码可以做到这一点,但是它不是函数式的(产量)
var matches = new ListBuffer[List[String]]()
for (line <- caselist){
var count = 0
for (pat <- pattern if (!pat.findAllIn(line).isEmpty)){
count += 1
matches += pat.findAllIn(line).toList
}
if (count == 0){
matches += List("NA")
}
}
return matches.toList
}
您的问题尚未完全解决,因此无法确定,但我相信以下内容可以解决问题:
for {
line <- caselist
matches = pattern.map(_.findAllIn(line).toList)
} yield matches.flatten match {
case Nil => List("NA")
case ms => ms
}
这应该做的工作。 使用foreach
和filter
生成匹配项并检查以确保每行都匹配。
caseList.foreach{ line =>
val results = pattern.foreach ( pat => pat.findAllIn(line).toList )
val filteredResults = results.filter( ! _.isEmpty )
if ( filteredResults.isEmpty ) List("NA")
else filteredResults
}
功能性并不意味着您不能拥有中间命名的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.