项目是自定义类型。
我有一个Iterable对(Item, Item)
。每对中的第一个元素是相同的,所以我想将列表缩减为一对类型(Item, Array[Item])
// list: Iterable[(Item, Item)]
//首次尝试
val res = list.foldLeft((null, Array[Item]()))((p1,p2) => {
(p2._1, p1._2 :+ p2._2)
}
//第二次尝试
val r = list.unzip
val res = (r._1.head, r._2.toArray))
1。我不知道如何在第一个(“foldLeft”)解决方案中正确设置零值。有没有办法做这样的事情?
2。除了第二个解决方案之外,是否有更好的方法可以将自定义对象元组列表减少为单个元组?
答案 0 :(得分:2)
如果您确定每对中的第一个元素是相同的,为什么不使用该信息来简化?
(list.head._1, list.map(_._2))
应该做的工作
如果存在第一个元素不同的其他情况,您可能想尝试:
list.groupBy(_._1).map { case (common, lst) => (common, lst.map(_._2)) }