详尽枚举的 Scala 序列组
Scala sequence group by enum exhaustively
我想通过枚举对序列进行详尽分组,这意味着如果序列包含 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)
)
如何按 Color
对 furnitures
进行分组,例如:
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
未显示为一组。
您可以查看所有颜色并检查 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)))
我想通过枚举对序列进行详尽分组,这意味着如果序列包含 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)
)
如何按 Color
对 furnitures
进行分组,例如:
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
未显示为一组。
您可以查看所有颜色并检查 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)))