问题
In many cases, I want to apply the same filter
or map
function to a Seq
or ParSeq
collection. However I don't want to write the code twice.
def fun(data:ParSeq[String], num_start:Int,num_end:Int) = {
data filter { x=>
val temp = extract_number(x)
num_start <= temp && temp <= num_end
}
}
Like the code above, for a Seq[String]
I need to apply fun
, I have to rewrite it again and the content are exactly the same.
How can I avoid it?
回答1:
You can use GenSeq[String]
.
Both ParSeq
and Seq
extends GenSeq
, this is typically used in order to have functions that will use parallel or sequential operations depending on the type of collection you pass to them.
回答2:
Try this
def fun(data:GenSeq[String], num_start:Int,num_end:Int) = {
data filter { x=>
val temp = extract_number(x)
num_start <= temp && temp <= num_end
}
}
GenSeq is a trait
and it is extended [or implemented] by both ParSeq
and Seq
来源:https://stackoverflow.com/questions/42826571/how-to-define-a-function-which-accept-both-seqt-and-parseqt-as-parameter