0
votes

remplacer l'élément de liste par une autre et renvoie la nouvelle liste

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)


2 commentaires

STYE Étudiants est immuable, vous devez donc créer de nouveaux étudiants d'instance pour changer le passe-temps. classtoday.map (x => si (x.firstname == "john") x.copy (hoddy = "football") sinon x) . Méthode Copier instance de clones étudiants 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 et non étudiants .


4 Réponses :


3
votes

La fonction Lambda dans mappe doit renvoyer une valeur d'étudiants à nouveau, pas seulement "football" . Par exemple, si vous deviez remplacer tous les hobbies avec "football" , ce n'est pas correct: xxx

Ce que tu veux est The Copier Fonction : xxx

ou pour la tâche d'origine: xxx


1 commentaires

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



1
votes

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
              }


0 commentaires

0
votes

Je suggère de le rendre plus générique, vous pouvez créer une carte des noms aux loisirs:

Par exemple: xxx

et l'utiliser comme suit: xxx


0 commentaires

0
votes

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))


0 commentaires