首页 > 解决方案 > 列表到 Scala 中的列表列表

问题描述

我正在学习 Scala,这种不变性的想法仍然令人困惑,所以如果问题听起来很明显,请指出我正确的方向

如果我有一个带有 id、groupId 和 name 的对象列表

List(
Obj(1, 1, "1.1")
Obj(2, 1, "1.2")
Obj(3, 1, "1.3")
Obj(1, 2, "2.1")
Obj(2, 2, "2.2")
Obj(1, 3, "3.1")

在 Scala 中创建这样的东西的正确方法是什么。(项目不一定按groupId排序)

List(
    List(
        Obj(1, 1, "1.1")
        Obj(2, 1, "1.2")
        Obj(3, 1, "1.3")
    ), List(
        Obj(1, 2, "2.1")
        Obj(2, 2, "2.2")
    ), List(
        Obj(1, 3, "3.1")
    )
)

我应该使用for还是map有其他方法?

标签: scala

解决方案


Scala 不可变集合提供了更高阶的函数,例如map, foldLeft,groupBy等,它们生成一个的转换集合而不改变旧集合。例如,考虑groupBy跟随values

objs             // List[Obj]
  .groupBy(_.y)  // Map[Int,List[Obj]]
  .values        // Iterable[List[Obj]]

给定

case class Obj(x: Int, y: Int, s: String)

val objs =
  List(
    Obj(1, 1, "1.1"),
    Obj(2, 1, "1.2"),
    Obj(3, 1, "1.3"),
    Obj(1, 2, "2.1"),
    Obj(2, 2, "2.2"),
    Obj(1, 3, "3.1"),
  )

哪个输出

Iterable(
  List(Obj(1,1,1.1), Obj(2,1,1.2), Obj(3,1,1.3)), 
  List(Obj(1,2,2.1), Obj(2,2,2.2)), 
  List(Obj(1,3,3.1))
)

考虑通过List 交互式练习并在Scala gitter 频道上询问实时初学者友好指导。


推荐阅读