web-dev-qa-db-fra.com

Concaténer les valeurs de chaîne avec un délimiteur gérant les chaînes nulles et vides dans Java 8?

Dans Java 8 J'ai un certain nombre de valeurs de chaîne et je veux finir avec une liste délimitée par des virgules de valeurs valides. Si une chaîne est nulle ou vide Je veux l'ignorer. Je sais que cela semble courant et ressemble beaucoup à cette vieille question ; cependant, cette discussion n'aborde pas les espaces Nuls ET (je ne fais pas non plus 'aime pas la réponse acceptée).

J'ai regardé Java 8 StringJoiner, commons StringUtils (join) et fidèle goyave (Joiner) mais aucun ne semble être une solution complète. La vision:

 where: val1="a", val2=null, val3="", val4="b"

  String niceString = StringJoiner.use(",").ignoreBlanks().ignoreNulls()
    .add(val1).add(val2).add(val3).add(val4).toString();

résulterait en niceString = "a, b"

N'y a-t-il pas une bonne façon de le faire (cela n'implique pas pour les boucles, le chargement de chaînes dans une liste et/ou les remplacements d'expressions régulières pour supprimer les entrées incorrectes)?

21
eze
String joined = 
    Stream.of(val1, val2, val3, val4)
          .filter(s -> s != null && !s.isEmpty())
          .collect(Collectors.joining(","));
65
Brian Goetz