partition和groupBy有什么区别?

non*_*ndo 5 scala

我正在通过Twitter的Scala学校阅读,正在研究收集的方法groupBypartition方法.而且我不确定这两种方法之间的区别是什么.

我自己做了一些测试:

scala> List(1, 2, 3, 4, 5, 6).partition(_ % 2 == 0)
res8: (List[Int], List[Int]) = (List(2, 4, 6),List(1, 3, 5))

scala> List(1, 2, 3, 4, 5, 6).groupBy(_ % 2 == 0)
res9: scala.collection.immutable.Map[Boolean,List[Int]] = Map(false -> List(1, 3, 5), true -> List(2, 4, 6))
Run Code Online (Sandbox Code Playgroud)

那么这是否意味着partition返回两个列表的列表并groupBy返回带有布尔键和列表值的Map?两者都具有基于条件将列表分成两个不同部分的相同"效果".我不知道为什么我会用一个而不是另一个.那么,我何时会使用partition,groupBy反之亦然?

Sas*_*erg 5

groupBy 更适合更复杂对象的列表.

说,你有一节课:

case class Beer(name: String, cityOfBrewery: String)
Run Code Online (Sandbox Code Playgroud)

和啤酒清单:

val beers = List(Beer("Bitburger", "Bitburg"), Beer("Frueh", "Cologne") ...)
Run Code Online (Sandbox Code Playgroud)

然后你可以通过cityOfBrewery以下方式分组啤酒:

val beersByCity = beers.groupBy(_.cityOfBrewery)
Run Code Online (Sandbox Code Playgroud)

现在,您可以获得自己在数据中所有城市酿造的所有啤酒的列表:

val beersByCity("Cologne") = List(Beer("Frueh", "Cologne"), ...)
Run Code Online (Sandbox Code Playgroud)

整洁,不是吗?