La concaténation de chaîne allé fonctionnelle
Supposons qu'il y a 3 chaînes:
protein, starch, drink
La concaténation de ceux, on pourrait dire que ce qui est pour le dîner:
Exemple:
val protein = "fish"
val starch = "chips"
val drink = "wine"
val dinner = protein + ", " + starch + ", " + drink
Mais que faire si il manquait quelque chose, par exemple les protéines, parce que ma femme ne pouvait pas attraper quoi que ce soit. Ensuite, nous aurons: ,chips, drink
pour le dîner.
Il est un habile moyen pour concaténer les chaînes pour éventuellement ajouter les virgules - je ne sais pas ce que c'est 😉. Quelqu'un aurait-il une bonne idée?
Je suis à la recherche de quelque chose comme:
val dinner = protein +[add a comma if protein is not lenth of zero] + starch .....
C'est juste un exercice amusant, je suis en train de faire, alors maintenant, la sueur s'il ne peut pas être fait d'une façon cool. La raison que je suis en train de faire le conditionnel concaténation dans une seule affectation, c'est parce que je suis en utilisant ce type de chose beaucoup en XML et une belle solution de faire les choses..... plus agréable.
Vous devez vous connecter pour publier un commentaire.
Quand vous dites "c'est peut-être absent", cette entité devrait être
Option[T]
. Ensuite,Vous l'appeler comme ceci:
Dans le cas où vous voulez absolument la vérification d'une chaîne vide,
nonEmpty
, Java 1.6 aisEmpty
... pourquoi comparer la longueur lorsque tout ce que vous voulez est de savoir si la chaîne est vide ou pas?filterNot(""==)
est un peu plus concis quefilter(_.nonEmpty)
nonEmpty
est plus clairnonEmpty
méthode est tout autant "comment tester" ce qu'est l'appel de la==
méthode avec un""
argument. Bien sûr, son nom nous donne un indice de ce que la méthode n' (mais le fait de==
), et elle rend le code lire la suite comme en anglais, mais est-il rien de plus que cela? Sommes-nous juste dire que sans paramètre méthodes sont intrinsèquement mieux? & que si le nom de la méthode dépasse un seuil de similarité avec l'exigence? (note: doit avoir utiliséfilter(""!=)
de golf complets de points!)nonEmpty
est un peu plus cher queisEmpty
.Vous êtes à la recherche pour mkString sur les collections, peut-être.
résultats dans:
Vous pouvez même spécifier le début et la fin:
Cela prend en charge les cas de chaînes vides, et montre également comment vous pouvez mettre une autre logique pour le filtrage et la mise en forme. Cela fonctionne très bien pour un
List[String]
et généralise àList[Any]
.L'idée est que
flatMap
prend unList[Any]
et utilise correspondant à attribuerNone
pour tous les éléments que vous ne souhaitez pas conserver dans la sortie. Les Nvos s'aplatissent loin et Somes séjour.Si vous avez besoin d'être capable de gérer différents types (Int, Double, etc) ensuite, vous pouvez ajouter plus de cas.
protein
est une chaîne vide.