假设我有一个案例类MyCaseClass
,其中包含构造函数中的两个字段,以及此案例类sequence
的一系列值。
如何解压缩sequence
?
答案 0 :(得分:3)
案例类不扩展Product2,Product3等,因此简单的解压缩不起作用。
这样做:
sequence.unzip { MyCaseClass.unapply(_).get }
答案 1 :(得分:3)
如果字段为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版本,收集大小,月相等,您的结果可能会有所不同。