【问题标题】:Scala sequence group by enum exhaustivelyScala序列组通过枚举详尽
【发布时间】:2020-03-02 22:38:54
【问题描述】:

我想通过枚举对序列进行详尽的分组,这意味着如果序列中包含 0 个枚举,则无论如何都将其包含在分组中。

例如,如果我有一个类似的枚举

object Color extends Enumeration {
  type Color = Value
  val Red, Green, Blue = Value
}

使用枚举的对象

case class Furniture (
  name: String,
  color: Color.Value
)

对象列表

val furnitures = Seq(
  Furniture("Chair", Color.Red), 
  Furniture("Table", Color.Red),
  Furniture("Bed", Color.Blue),
  Furniture("Sofa", Color.Blue)
)

我如何将furnituresColor 分组,例如:

Map(
  Color.Red -> List(Furniture("Chair", Color.Red), Furniture("Table", Color.Red)),
  Color.Green -> List(),
  Color.Blue -> List(Furniture("Bed", Color.Blue), Furniture("Sofa", Color.Blue))
)

使用Seq.groupBy 方法,Color.Green 不会显示为一个组。

【问题讨论】:

    标签: scala enums sequence scala-collections


    【解决方案1】:

    您可以检查所有颜色并检查groupBy 创建的地图是否包含任何列表,如果不包含则添加默认的空列表:

    val grouped = furnitures.groupBy(_.color)
    val result = Color.values.map(c => (c, grouped.getOrElse(c, Nil))).toMap
    
    println(result) 
    //Map(Red -> List(Furniture(Chair,Red), Furniture(Table,Red)), Green -> List(), Blue -> List(Furniture(Bed,Blue), Furniture(Sofa,Blue)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 2020-05-04
      • 2021-04-09
      相关资源
      最近更新 更多