0
votes

ListBuffer de Collecharge Func

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


0 commentaires

3 Réponses :


2
votes

suit assez simple? xxx

si feuille est une classe de cas: xxx


0 commentaires

3
votes

Pourquoi voudriez-vous que ce soit un 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.

ayant dit que, la conversion entre les types de collecte peut être effectuée sans intermédiaires en utilisant un chose appelée é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)


3 commentaires

J'ai besoin d'ajouter l'élément à la fin de la liste et je ne peux donc pas list :: valeur . Plus ici


Cette réponse est meilleure que la mienne, je suggérerais de l'accepter. Personnellement, je ne savais pas sur Breakout jusqu'à présent. Cependant, je suggère également de modifier la réponse. Tout d'abord, laissez-le avoir son listbuffer et qu'expliquer, pourquoi cela pourrait ne pas être la meilleure collection à travailler. Aussi ??? peut être remplacé par ? .


@Mrnetroful Ne pas ajouter des éléments aux listes existantes. C'est une mauvaise idée aussi.



0
votes

Vous pouvez utiliser la méthode à la méthode de conversion générique (dans scala <2.13): xxx

à l'aide de à est similaire à BREAKOUT , dans le sens où il utilise la machine CANBUILDFOM 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 à nécessite un type avec un argument d'un type ( listbuffer [a] , vecteur [A] , etc., etc., ), alors que tout mappe Les descendants ont deux ( hashmap [a, b] , Treemap [A, B] , etc.).

dans SCALAA 2.13 Avec sa nouvelle bibliothèque de collections, cela pourrait être écrit comme suit: xxx

Notez les parenthèses rondes au lieu des supports: dans SCALA 2.13, le à 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: xxx


0 commentaires