2016-04-18 13 views
7

Java 8'de bazı Dize değerlerim var ve ben virgülle ayrılmış geçerli değerler listesiyle sonuçlanmak istiyorum. Bir dize boşsa veya boş Bunu göz ardı etmek istiyorum. Bunun genel bir şey olduğunu biliyorum ve this old question; Ancak, bu tartışma null ve boşluklara değinmez (aynı zamanda kabul edilen cevabı beğenmiyorum).Java 8'de boş ve boş dizeleri sınırlayıcı ile dizi değerleri birleştirin mi?

Java 8 StringJoiner'a, StringUtils'e (join) ve guava'ya (Joiner) baktım ama hiçbiri tam bir çözüm gibi görünmüyor. vizyon:

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

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

(yani, döngüler için bir liste halinde yükleme dizeleri dahil değildir ve niceString = "a, b"

Bunu yapmak için güzel bir yol yok mudur neden olacaktır/veya regex, kötü girdileri kaldırmak için değiştirir)?

+2

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

+4

basit Java 8 yöntemdir 'Stream.of (val1, val2, VAL3 , val4) .filter (s -> s! = null &&! s.isEmpty()) Collector.joining' adlı statik bir içe aktarma ile toplama (",")). Bu sizin hoşunuza gitmiyorsa, kendi sınıfınızı yaratmanız veya bir kütüphanede bir tane bulmanız gerekir. Ama neden rahatsızsın? – Misha

+1

baştan başa başabaş ama belki de değil. – eze

cevap

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

Oldukça ilgili ve yinelenen sorular var. Lütfen bu şekilde kapatmaya oy verin ve başvuruda bulunursa cevaplarınızı verin. – Savior

+6

@Yan Goetz (ana Java mimarlarından biri) tarafından yanıtlanan soruları otomatik olarak diğerlerinin yinelenen hedef olarak kullanması gereken sorular haline gelir (o bizim Java Skeet'imiz Jon 8). – Pshemo