我将groupBy
函数应用于我的List集合,但是我想删除Map的值部分中的重复值。这是最初的List集合:
PO_ID PRODUCT_ID RETURN_QTY
1 1 10
1 1 20
1 2 30
1 2 10
当我将groupBy应用于该List时,它将产生如下内容:
(1, 1) -> (1, 1, 10),(1, 1, 20)
(1, 2) -> (1, 2, 30),(1, 2, 10)
我真正想要的是这样的:
(1, 1) -> (10),(20)
(1, 2) -> (30),(10)
那么,有没有删除Map
的值[(1,1),(1,2)]
中的重复部分?
感谢..
答案 0 :(得分:4)
对于
val a = Seq( (1,1,10), (1,1,20), (1,2,30), (1,2,10) )
考虑
a.groupBy( v => (v._1,v._2) ).mapValues( _.map (_._3) )
提供
Map((1,1) -> List(10, 20), (1,2) -> List(30, 10))
请注意,mapValues
对从List[List]
获得的groupBy
个三元组进行操作,而在map
中,我们提取每个三元组的第三个元素。
答案 1 :(得分:1)
首先将元组分开是否更容易?
scala> val ts = Seq( (1,1,10), (1,1,20), (1,2,30), (1,2,10) )
ts: Seq[(Int, Int, Int)] = List((1,1,10), (1,1,20), (1,2,30), (1,2,10))
scala> ts map { case (a,b,c) => (a,b) -> c }
res0: Seq[((Int, Int), Int)] = List(((1,1),10), ((1,1),20), ((1,2),30), ((1,2),10))
scala> ((Map.empty[(Int, Int), List[Int]] withDefaultValue List.empty[Int]) /: res0) { case (m, (k,v)) => m + ((k, m(k) :+ v)) }
res1: scala.collection.immutable.Map[(Int, Int),List[Int]] = Map((1,1) -> List(10, 20), (1,2) -> List(30, 10))
猜不是。