2

環境

私はこのようなリストを持っています:

List[(User)]

そして、次のようなリストが必要です:

List[(String, String)]

ユーザーが次のように定義されている場合:

case class User(
    id:Pk[Long] = NotAssigned, 
    name: String
)    

実際には、最初のリストは classes から構築されます:

試した:

私の最初の「素朴な」試み(Javaからのもの)は次のとおりでした:

myList.map { u => u.id.get.toString, u.name }

そして、私はエラーを持っています:

required List[(String, String)] 
given List[(java.lang.String, String)]

解決

コメントで参照されている投稿で述べたように、Scala には拡張 java.lang.String である String 型があります。推論を使用する場合、Scala は Scala スーパー クラスに変換されません。Scala の String 型を使用するには、戻り値の型を明示的に定義する必要があります。

例:

// Returns List[(java.lang.String, String)]
myList.map { u => u.id.get.toString, u.name }

// Returns List[(String, String)]
def convert(m:List[User]):List[(String, String)] = {
    m.map { u => u.id.get.toString, u.name }    
}
4

5 に答える 5

4

あなたは近くにいます。括弧を追加するだけです。

myList.map { u => (u.id.get.toString, u.name) }

または、extractor for を使用することもできますUser

myList.map { case User(id, name) => (id.get.toString, name) }
于 2012-07-24T12:53:26.867 に答える
4

なぜこれがうまくいかないのですか?

def method(a:List[(Long,String)]):List[(String,String)] = a.map { case (value1,value2) => (value1.toString,value2)}
于 2012-07-24T12:31:33.967 に答える
2

これは私のREPLで機能します:

scala> case class User (id: Option[Long] = None, name:String)
defined class User

scala> val users = User(name = "Name") :: User(name = "LastName") :: Nil
users: List[User] = List(User(None,Name), User(None,LastName))

scala> val pairs = users.map{u => u.id.toString -> u.name}
pairs: List[(String, String)] = List((None,Name), (None,LastName))
于 2012-07-24T12:55:59.153 に答える
1

どうですか:

myList.map(t => t._1+"" -> t._2)

または代わりに:

myList.map { case(k,v) => (k.toString, v) }
于 2012-07-24T12:25:51.233 に答える
1
val xs: List[(Long, String)] = List((1l, "A"), (2l, "B"))
val ys: List[(String, String)] = xs.map{case (a, b) => (a.toString, b)}

上記のソリューションでは、タプルをその構成要素に分解できるようにするために、部分関数 (実際には特定のドメインの合計関数である) が使用されます (ここではab)。

タプルのアクセサ メソッドを使用して、コンポーネントにアクセスすることもできます。

val zs: List[(String, String)] = xs.map(t => (t._1.toString, t._2))
于 2012-07-24T12:24:43.993 に答える