0

我想在 Scala 中进行总结。

我有一个案例类实例列表。

case class Structure(structureFirst:String,structureSecond:String,structureThird:String,count:Int)

val structures = List(
  Structure("first001","second001","third001",1),

  Structure("first002","second002","third002",2),
  Structure("first002","second002","third002",2),

  Structure("first003","second003","third003",3),
  Structure("first003","second003","third003",3),
  Structure("first003","second003","third003",3),

  Structure("first004","second004","third004",4),
  Structure("first004","second004","third004",4),
  Structure("first004","second004","third004",4),
  Structure("first004","second004","third004",4)
)

那么我想总结一下这样的SQL。

SELECT SUM(Structure.count) FROM structures GROUP BY Structure.structureFirst,Structure.structureSecond,Structure.structureThird;

这是输出。

val result = List(
  Structure("first001","second001","third001",1),
  Structure("first002","second002","third002",4),
  Structure("first003","second003","third003",9),
  Structure("first004","second004","third004",16)
)

我该如何总结这一点?

谢谢。

4

2 回答 2

0

使用groupBy, 在这个几乎单行中:

structures.groupBy(s => (s.structureFirst, s.structureSecond, s.structureThird)).map {
   case (key, ss) => 
      ss.reduce((a,b) => a.copy(count = a.count + b.count) ) 
}.toList.
sortBy (_.count)
于 2013-10-17T05:14:15.980 回答
0

我绝不是世界上最好的 Scala 开发人员,但我的新手尝试产生了这个

val result = for (structs <- structures.groupBy(_.structureFirst).values.toList)
  yield { 
    structs.reduce((item, cur) => item.copy(count=item.count + cur.count))
  }

result: List[Structure] = List(
 Structure(first002,second002,third002,4), 
 Structure(first004,second004,third004,16), 
 Structure(first001,second001,third001,1), 
 Structure(first003,second003,third003,9)
)
于 2013-10-17T04:24:53.963 回答