【发布时间】:2017-12-07 03:03:27
【问题描述】:
我有一个Map[String, Int]
val labelMap: mutable.HashMap[String, Int] = sparse0.sparseOperationCountRowsByTarget()
我想在一个语句中过滤该映射。过滤器可以同时过滤String或Int
最粗略的形式是这样的:
val labelMapFiltered = labelMap.filter(label => label._1.startsWith("REL") || label._2 < 400)
现在我已经有了 String 和 Int 函数的通用实用谓词。字符串谓词是:
object StringPredicates
{
def stringEquals(required:String)(input:String) = input == required
def stringStartsWith(required:String)(input:String) = input.startsWith(required)
def stringContains(required:String)(input:String) = input.contains(required)
def and(predicates:Seq[String => Boolean])(input:String) = predicates.forall(predicate => predicate(input))
def or(predicates:Seq[String => Boolean])(input:String) = predicates.exists(predicate => predicate(input))
}
Int 谓词与上面的模式相同。
这允许以下过滤器:
val sw1=stringContains("#")
val sw2=stringStartsWith("REL")
val sw3=intGT(400)
val labelMapFiltered = labelMap.filter( label =>sw1(label._1) || sw2(label._1) || sw3(label._2) )
我想将谓词传递给函数(我假设为 Seq),然后进行过滤。 所以我正在寻找类似的东西:
val labelMapFiltered = labelMap.filter( myFunction(myPredSeq))
我可以使用已有的谓词来做到这一点吗?为Tuple2[String,Int] 编写与此函数中的特定 Map 匹配的谓词似乎过于具体。然后,我必须为要过滤的每种类型的 Map 编写谓词。
【问题讨论】:
标签: scala