6

给定一个此类List的对象:Person

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

获取带有id键和name值的(java)HashMap的“scala方式”是什么?

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

谢谢你。

编辑

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

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

return map
4

2 回答 2

11
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 映射。

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

于 2012-05-03T21:49:52.157 回答
2

这个怎么样:

  • HashMap使用personList的大小在空中预分配足够的条目,
  • 运行foreach循环,
  • 如果你需要不变性,return java.collections.unmodifiableMap(map)

这种方法不创建中间对象。可变状态仅限于一个本地对象时是可以的——反正没有副作用:)

免责声明:我对 Scala 知之甚少,因此请谨慎支持。

于 2012-05-03T22:30:14.660 回答