[英]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.