Je suis un peu coincé avec ceci, et je sais que c'est une question simple sanglante: (
J'ai une classe de cas telle que: p>
classToday.map(x => if (x.firstName == "John") "Soccer" else x)
4 Réponses :
La fonction Lambda dans Ce que tu veux est The ou pour la tâche d'origine: p> mappe code> doit renvoyer une valeur d'étudiants code> à nouveau, pas seulement "football" code>. Par exemple, si vous deviez remplacer tous les hobbies em> avec "football" code>, ce n'est pas correct: Copier CODE> Fonction : p>
Merci! C'est exactement ce que je cherchais! J'ai essayé un .replace mais ça n'a pas ressemblé à .replace était disponible pour la liste
Vous pouvez utiliser la syntaxe correspondante de modèle pour joliment ce type de transition.
val newList = classToday.map{
case s@Students("John",_,_) => s.copy(hobby = "Soccer")
case s => s
}
Je suggère de le rendre plus générique, vous pouvez créer une carte des noms aux loisirs:
Par exemple: p> et l'utiliser comme suit: p>
Ce serait mieux si vous pouvez créer un mappage entre le prénom de l'étudiant avec passe-temps, vous pouvez l'utiliser comme ceci:
scala> val hobbies = Map("John" -> "Soccer", "Messi" -> "Soccer", "Williams" -> "Cricket")
hobbies: scala.collection.immutable.Map[String,String] = Map(John -> Soccer, Messi -> Soccer, Williams -> Cricket)
scala> case class Student(firstName: String, lastName: String, hobby: String)
defined class Student
scala> val students = List(Student("John", "Smith", "Nothing"), Student("Williams", "Lopez", "Nothing"), Student("Thomas", "Anderson", "Nothing"))
students: List[Student] = List(Student(John,Smith,Nothing), Student(Williams,Lopez,Nothing), Student(Thomas,Anderson,Nothing))
scala> students.map(student => student.copy(hobby = hobbies.getOrElse(student.firstName, "Nothing")))
res2: List[Student] = List(Student(John,Smith,Soccer), Student(Williams,Lopez,Cricket), Student(Thomas,Anderson,Nothing))
STYE
Étudiants CODE> est immuable, vous devez donc créer de nouveaux étudiantsd'instance code> pour changer le passe-temps.classtoday.map (x => si (x.firstname == "john") x.copy (hoddy = "football") sinon x) code>. MéthodeCopier code> instance de clonesétudiants code> avec passe-temps déposé modifié.Style Note: Si une seule valeur de votre classe de cas ne représente qu'un seul élève, il est préférable de nommer
étudiant code> et nonétudiants code>.