salut je toue comment puis-je simplifier le code ci-dessous:
val leavesValues: ListBuffer[Double] = ListBuffer()
leavesValues.appendAll(
leaves
.collect { case leaf: Leaf => leaf.value.toDouble }
.toList
)
leavesValues
3 Réponses :
suit assez simple? si feuille code> est une classe de cas: p>
Pourquoi voudriez-vous que ce soit un ayant dit que, la conversion entre les types de collecte peut être effectuée sans intermédiaires en utilisant un chose appelée listbuffer code> pour commencer ??? Des conteneurs mutables doivent être évités et, dans SCALA, vous n'avez presque jamais besoin d'eux, à l'exception de certains cas de coin rares. Je suggère que vous prétendez simplement qu'ils n'existent pas du tout avant de saisir suffisamment de la langue pour pouvoir distinguer avec confiance ces rares scénarios. éclat code>. Voici comment vous l'utilisez: P> import scala.collection.breakOut
val leavesValues: ListBuffer[Double] = leaves.collect {
case leaf: Leaf => leaf.value.toDouble
}(breakOut)
J'ai besoin d'ajouter l'élément à la fin de la liste et je ne peux donc pas list :: valeur code>. Plus ici
Cette réponse est meilleure que la mienne, je suggérerais de l'accepter. Personnellement, je ne savais pas sur Breakout Code> jusqu'à présent. Cependant, je suggère également de modifier la réponse. Tout d'abord, laissez-le avoir son listbuffer code> et qu'expliquer, pourquoi cela pourrait ne pas être la meilleure collection à travailler. Aussi ??? code> peut être remplacé par ? Code>.
@Mrnetroful Ne pas ajouter des éléments aux listes existantes. C'est une mauvaise idée aussi.
Vous pouvez utiliser la méthode à l'aide de dans SCALAA 2.13 Avec sa nouvelle bibliothèque de collections, cela pourrait être écrit comme suit: p> Notez les parenthèses rondes au lieu des supports: dans SCALA 2.13, le à code> la méthode de conversion générique (dans scala <2.13): à code> est similaire à BREAKOUT CODE>, dans le sens où il utilise la machine CODE> CANBUILDFOM CODE> Pour effectuer la conversion, sauf si vous pouvez fournir uniquement le type de collecte cible (sans type d'élément) directement sur la méthode. Malheureusement, cela ne fonctionne pas pour les cartes car à code> nécessite un type avec un argument d'un type ( listbuffer [a] code>, vecteur [A] code>, etc., etc., ), alors que tout mappe code> Les descendants ont deux ( hashmap [a, b] code>, Treemap [A, B] code>, etc.). P > à code> la méthode accepte une référence à un objet compagnon d'une collection plutôt que de type de collecte. Dans SCALA 2.13, la bibliothèque de collecte a une conception différente; En particulier, cette nouvelle approche permet également aux types de cartes: p>