2016-04-18 27 views
7

In Java 8 ho un certo numero di valori di stringa e voglio finire con un elenco delimitato da virgola di valori validi. Se una stringa è nullo o vuoto, voglio ignorarlo. So che questo sembra comune ed è molto simile a this old question; tuttavia, quella discussione non affronta gli spazi NULL e NULL (anche io non mi piace la risposta accettata).Concatena i valori stringa con delimitatore che gestisce stringhe null e vuote in java 8?

Ho esaminato Java 8 StringJoiner, commons StringUtils (join) e fidato guava (Joiner) ma nessuno sembra una soluzione completa. La visione:

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

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

comporterebbe niceString = "a, b"

non c'è un bel modo per fare questo (che non comporta per i loop, le stringhe di carico in un elenco, e/o regex sostituisce per rimuovere le voci errate)?

+2

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

+4

Il modo più semplice di Java 8 è 'Stream.of (val1, val2, val3 , val4) .filter (s -> s! = null &&! s.isEmpty()). collect (unendo (",")) 'con un'importazione statica di' Collectors.joining'. Se non è di tuo gradimento, dovresti creare la tua classe o trovarne una in qualche biblioteca. Ma perché preoccuparsi? – Misha

+1

dup per titolo forse ma non intensione. – eze

risposta

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

Ci sono alcune domande correlate e duplicate. Si prega di votare per chiudere in quanto tale e fornire le risposte lì se si applicano. – Savior

+6

Le domande poste da @Pillar a Brian Goetz (uno dei principali architetti Java) diventano automaticamente domande che altri dovrebbero utilizzare come target duplicato (è il nostro Jon Skeet di Java 8). – Pshemo