List[TraitA]
のオブジェクトがあるとしましょう。TraitA
プロパティを提供しますpropX : String
。このリストのサブセットが のインスタンスでもあることはわかっていますがTraitB
、これはプロパティ を提供しませんpropX
。
たとえば、次のようになります。
trait TraitA
{
def propX : String
}
trait TraitB
{
def abc : Int
}
リスト内のいくつかのインスタンスは、extend TraitA
その他のものextend TraitA with TraitB
です。持っているインスタンスのみを抽出する必要がありますが、からTraitB
プロパティを保持する必要があります。必要なのは、この値に従ってのインスタンスをグループ化するです。propX
TraitA
propX
Map
TraitB
したがって、TraitB
インスタンスからインスタンスのこのサブセットを抽出する必要がありList[TraitA]
ます。それらの一部はであり、 キーがfromであるTraitA with TraitB
を作成します。Map[String, List[TraitB]]
propX
TraitA
for
私は内包表記をいじっていましyield
たList[(String, TraitB)]
がgroupBy _.1
、おそらく最初のジェネレーターがTraitA
.
私はこれを試しましたが、予想されるタイプが次のように不平を言いますList[(String, TraitA)]
:
for {
traitA <- listOfTraitAs
traitBoption = (traitA match {
case traitB : TraitB => Some(traitB)
case _ => None
})
} yield (traitA.propX, traitBoption)
逆に、filter
パターンマッチングでリストするとフィルタリング機能でTraitB
見えなくなってしまいます。propX
これを達成するための最良のアプローチは何ですか?