6

ListこのクラスのPersonオブジェクトが与えられた場合:

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

idキーとname値を使用して(Java) HashMap を取得する「スカラの方法」は何でしょうか?

最良の回答に の使用が含まれていない場合は.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)?

このアプローチでは、中間オブジェクトは作成されません。可変状態は、1 つのローカル オブジェクトに限定されている場合は問題ありません — とにかく副作用はありません :)

免責事項: 私は Scala をほとんど知らないので、これに賛成票を投じることには注意してください。

于 2012-05-03T22:30:14.660 に答える