假设我有一个MyCaseClass
在构造函数中有两个字段的案例类,以及这个案例类的一系列值,sequence
.
我如何解压缩sequence
?
如果字段是a
,b
那么我就写
(sequence map (_.a), sequence map (_.b))
好的,你遍历sequence
了两次,但是列表遍历太便宜了,我敢打赌这比使用 Option.get 更快。
编辑:在 Rex 发表评论后,我忍不住自己运行了一个基准测试;结果如下...
times in ms for 100 traversals of 10000 elem collection,
L = List, A = Array, V = Vector
// Java 6 // Java 7
sequence.unzip{case MyCaseClass(a,b) => (a,b)} //L 173 A 101 V 87 //L 27 A 29 V 21
sequence.unzip{MyCaseClass.unapply(_).get} //L 194 A 116 V 100 //L 35 A 32 V 25
(sequence map (_.a), sequence map (_.b)) //L 177 A 70 V 86 //L 34 A 20 V 23
根据 CPU、内存、JRE 版本、集合大小、月相等,您的结果可能会有所不同。
案例类不扩展 Product2、Product3 等,因此简单的解压缩不起作用。
这样做:
sequence.unzip { MyCaseClass.unapply(_).get }