2016-04-18 10 views
7

Java 8では、いくつかの文字列値があり、有効な値のカンマ区切りのリストで終わりたいと思います。文字列がで空または空の場合私はそれを無視したい。私はこれがよく見えて、多くのようなものだと知っていますthis old question;しかし、その議論では、空白と空白は扱われません(私も受け入れられた答えが嫌いです)。文字列の値を、Java 8の空文字列を処理する区切り文字と連結しますか?

私はJava 8 StringJoiner、Commons StringUtils(join)、およびtrusty guava(Joiner)を見てきましたが、どれも完全な解決策ではないようです。ビジョン:

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

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

(つまり、forループリストにロードする文字列を含ませず、niceString =「B」

はこれを行うには良い方法がないことになります/または正規表現は不正なエントリを削除するために置き換えられます)?

+2

http://stackoverflow.com/questions/31380784/java-8-stream-string-null-or-empty-filter – Savior

+4

簡単なJavaの8の方法は 'Stream.of(val1と、VAL2、val3は、val4).filter(s - > s!= null &&!s.isEmpty())。collect(join( "、")) '' Collectors.joining'の静的インポート。それがあなたの好みに合っていないなら、あなたは自分のクラスを作ったり、いくつかの図書館で見つけなければなりません。しかし、なぜ迷惑? – Misha

+1

dup by titleおそらく、意図はありません。 – eze

答えて

25
String joined = 
    Stream.of(val1, val2, val3, val4) 
      .filter(s -> s != null && !s.isEmpty()) 
      .collect(joining(",")); 
+1

多くの関連した重複した質問があります。申請書を締めて投票してください。 – Savior

+6

Brian Goetz(主なJavaアーキテクトの1人)の答えは、他の人が重複するターゲット(Java 8のJon Skeetです)として自動的に使用する質問になります。 – Pshemo

関連する問題