我有一个list
,可能包含三种不同类型的类,并且都来自E
类,例如A extends E
,B extends E
和C extends E
。我需要识别list
中的每个元素并相应地进行一些计算。 (list
将来可能会包含更多的E
子类。)
我更喜欢使用map
或partition
或groupBy
,而不仅仅是if
,但我现在更加困惑。因为我对Scala很新,如果有人可以分享一些想法?谢谢!
val list = //some codes to get the list//
list.groupby{
_.getClass //so in this line, is it possible to call the calculation method accordingly?
}
trait A extends E {
def calA = {...}
}
trait B {
def calB = {...}
}
trait C {
def calC = {...}
}
答案 0 :(得分:2)
您可以使用模式匹配处理不同的类:
val list = List(1, "s", "t")
list map {
case a: A => a.calA
case b: B => b.calB
case i: Int => i + 5
case s: String => s.toUpperCase
}
// -> List(6, "S", "T")
list groupBy {
case a: E => "E" // grouping A, B and C together
case i: Int => "Int"
case s: String => "String"
}
// -> Map("Int" -> List(1), "String" -> List("s", "t"))