我经常需要做类似的事情
coll.groupBy(f(_)).mapValues(_.foldLeft(x)(g(_,_)))
达到相同效果但避免显式构造中间集合的最佳方法是什么groupBy
?
您可以将初始集合折叠在保存中间结果的地图上:
def groupFold[A,B,X](as: Iterable[A], f: A => B, init: X, g: (X,A) => X): Map[B,X] =
as.foldLeft(Map[B,X]().withDefaultValue(init)){
case (m,a) => {
val key = f(a)
m.updated(key, g(m(key),a))
}
}
你说收藏我写Iterable
,但是您必须考虑问题中的顺序是否重要。
如果您想要高效的代码,您可能会使用可变映射,如雷克斯的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)