問題はタイトルにありますが、ここに詳細があります。Scalaの追加パラメータと似ている別のケースクラスに変換する
私は2つのケースのクラスがあります。
case class JourneyGroup(id: Option[Int] = None,
key: UUID,
name: String,
data: Option[JsValue],
accountId: Int,
createdAt: DateTime = DateTime.now,
createdById: Int,
updatedAt: Option[DateTime] = None,
updatedById: Option[Int] = None,
deletedAt: Option[DateTime] = None,
deletedById: Option[Int] = None)
と
case class JourneyGroupApi(id: Option[Int] = None,
key: UUID,
name: String,
data: Option[JsValue],
accountId: Int,
createdAt: DateTime = DateTime.now,
createdById: Int,
updatedAt: Option[DateTime] = None,
updatedById: Option[Int] = None,
deletedAt: Option[DateTime] = None,
deletedById: Option[Int] = None,
parties: Seq[Party] = Seq.empty[Party])
背景:これら二つの別々のクラスを持つ理由は、滑らかな、コレクションをサポートしていないという事実である、と私はコレクションが必要です私が手動で構築する関連オブジェクトの結論として、私はそれを単一のクラスで動作させることはできませんでした。
私が必要とするのは、1つから別のものへの簡単な変換方法です。作業していて、非常に醜いとメンテナンスの多くを必要とされる
def toJourneyGroupApi(parties: Seq[Party]): JourneyGroupApi = JourneyGroupApi(
id = id,
key = key,
name = name,
data = data,
accountId = accountId,
createdAt = createdAt,
createdById = createdById,
updatedAt = updatedAt,
updatedById = updatedById,
deletedAt = deletedAt,
deletedById = deletedById,
parties = parties
)
: この時点で、自分自身のブロックを解除するために、私は手動で変換を作成しました。
私がやってみました一つのことがある:
- は
- が
shapeless
を使用して、そのタプルに要素を追加し、タプル
を結果から、対象物を構築するタプルするソースオブジェクトを変換しますimport shapeless._ import構文.std.tuple._
ヴァルgroupApi =(JourneyGroup.unapply(グループ)に.get:+ Seq.empty [パーティー])(JourneyGroupApi.tupled)
しかし、このことはさらに、:+
の結果はタプルではないことを、主張していますしかしコンソールで:
Party.unapply(P)に.get:+ Seq.empty [参加]
RES0:(オプション[INT]、model.Parties.Type.Value、INT、INT、オプション[org.joda.time.DateTime]、オプション[org.joda.time.DateTime]、オプション[Int]、オプション[org.joda.time.DateTime]、オプション[Int]、Seq [model.Participant])= (なし、クライアント、123,234,2016-11-12T03: 55:24.006-08:00,987、なし、なし、なし、なし、リスト())
私は間違っていますか?たぶんこれを達成する別の方法があります。
これはオプションですが、言及したように、残りのコードには最適ではありません。ありがとう。 –