首页 文章

Scala映射到HashMap

提问于
浏览
6

给定此类的 PersonPerson 个对象:

class Person(val id : Long, val name : String)

什么是"scala way"获取(java)HashMap与 id 为键和 name 为值?

如果最佳答案不包括使用 .map ,请提供一个示例,即使它更难做到 .

谢谢 .

编辑

这就是我现在所拥有的,但它不是一成不变的:

val map = new HashMap[Long, String]
personList.foreach { p => map.put(p.getId, p.getName) }

return map

2 回答

  • 2
    import collection.JavaConverters._
    val map = personList.map(p => (p.id, p.name)).toMap.asJava
    
    • personList 的类型为 List[Person] .

    • .map 操作后,得到 List[Tuple2[Long, String]] (通常写为 List[(Long, String)] ) .

    • .toMap 之后,你得到 Map[Long, String] .

    • .asJava ,顾名思义,将其转换为Java Map .

    您无需定义 .getName.getid . .name.id 已经是getter方法 . 类似访问的外观是有意的,遵循统一访问原则 .

  • 11

    这个怎么样:

    • 使用 personList 的大小在空 HashMap 中预分配足够的条目,

    • 运行 foreach 循环,

    • 如果你需要不变性, return java.collections.unmodifiableMap(map)

    此方法不会创建中间对象 . 当它被限制在一个本地对象时,可变状态是可以的 - 无论如何没有副作用:)

    免责声明:我对Scala知之甚少,所以要小心谨慎 .

相关问题