0

List[TraitA]のオブジェクトがあるとしましょう。TraitAプロパティを提供しますpropX : String。このリストのサブセットが のインスタンスでもあることはわかっていますがTraitB、これはプロパティ を提供しませんpropX

たとえば、次のようになります。

trait TraitA
{
  def propX : String
}

trait TraitB
{
  def abc : Int
}

リスト内のいくつかのインスタンスは、extend TraitAその他のものextend TraitA with TraitBです。持っているインスタンスのみを抽出する必要がありますが、からTraitBプロパティを保持する必要があります。必要なのは、この値に従ってのインスタンスをグループ化するです。propXTraitApropXMapTraitB

したがって、TraitBインスタンスからインスタンスのこのサブセットを抽出する必要がありList[TraitA]ます。それらの一部はであり、 キーがfromであるTraitA with TraitBを作成します。Map[String, List[TraitB]]propXTraitA

for私は内包表記をいじっていましyieldList[(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

これを達成するための最良のアプローチは何ですか?

4

1 に答える 1