Ich habe eine Liste von Tuple-2 wie folgt aus:Kann ich in Scala eine Liste überlagern und gleichzeitig erweitern?
val stuff = List(("!thing","value"), ("otherthing","value"))
Ich möchte über diese Liste zu übergeben und Objekte aus dem Inhalt wie folgt erstellen:
val processed = stuff.map{ case (label, value) =>
if(label.startsWith("!"))
BigThing(label.tail,value) // extends trait Thing
else
LittleThing(label,value) . // extends trait Thing
}
So weit so gut. Nun die Frage ...
Während ich über diese Tupel zuordnen, wenn das Label mit "!" Beginnt, möchte ich auch ein Bonus(label.tail)
Objekt erstellen (erweitert auch die Eigenschaft Thing) und dieses Objekt zur resultierenden Liste hinzufügen . Dies bedeutet, dass eine Eingabeliste von n Elementen eine Liste von> n Elementen ergeben kann. Was ist die rationellste funktionale Lösung dafür?
Der endgültige Ausgang gewünscht ist eine erweiterte Liste von Thing. So das obige Beispiel würde erzeugen theoretisch (Reihenfolge unwichtig):
List(BigThing("thing","value"), Bonus("thing"), LittleThing("otherthing","value"))
prüfen dies als die beste Antwort. Eigentlich funktionierte die foldLeft-Antwort unten besser für meinen speziellen Gebrauch, aber die flatMap ist die bessere Antwort im Allgemeinen. – Greg