代码由scala编写,我想知道哪一个更有效:
src.filter(word=>!word.contain("xx").map{word=>(word,1))
或:
//src:Array("xx","c","d")
//if word contains xx,fuc will return (),how to deal with it ?
src.map(word=>if(!word.contain("xx")(word,1))
//result:Array((), (c,1), (d,1))
如果word包含xx,fuc将返回(),如何处理?
答案 0 :(得分:2)
src.map(word => if(!word.contains("xx")) (word,1))
这导致Array[Any]
而不是Array[(String, Int)]
,因为如果该词包含" xx"它映射到()
(单位)。
正确的方法是使用flatMap
或collect
方法。
src.flatMap { case word if ! word.contains("xx") => Some((word, 1))
case _ => None }
src.collect { case word if ! word.contains("xx") => (word, 1) } // preferred