scala – 是否有任何方法与map()执行相同的操作但生成不同类型的
发布时间:2020-12-16 10:07:46 所属栏目:安全 来源:网络整理
导读:有时我需要通过映射另一个具有不同类型的集合来创建集合.例如,某些函数需要List [_]作为其参数类型,但我需要通过映射IndexedSeq [_]来生成它: val r = (1 to n).map { ... }someFunction(r.toList) 虽然我可以通过首先调用IndexedSeq [_]的map方法然后再调
有时我需要通过映射另一个具有不同类型的集合来创建集合.例如,某些函数需要List [_]作为其参数类型,但我需要通过映射IndexedSeq [_]来生成它:
val r = (1 to n).map { ... } someFunction(r.toList) 虽然我可以通过首先调用IndexedSeq [_]的map方法然后再调用toList来实现这一点,但这会产生一个冗余的中间集合.有什么方法可以避免这个冗余的步骤,同时仍然保持代码简洁? 解决方法
看看地图的完整签名:
def map[B,That](f: (A) ? B)(implicit bf: CanBuildFrom[List[A],B,That]): That 关键是隐式CanBuildFrom,它控制如何从输入集合生成结果集合.我们可以使用允许我们构建不同结果集合的显式CanBuildFrom替换隐式CanBuildFrom. 更好的是,我们甚至不必编写这种显式方法!它已经以scala.collection.breakOut的形式出现了.来自ScalaDoc:
因此,如果我们传入collection.breakOut,我们就可以准确地指定我们想要的map方法: val x = IndexedSeq(1,2,3,4,5) x.map[Int,List[Int]](_ * 2)(collection.breakOut) > res6: List[Int] = List(2,6,8,10) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |