2017-05-05 1 views

Antwort

2

Sie sollten nur eine Karte Wert

data.stream() 
    .map(v -> v == null ? defaultValue : v) 
    ... // do whatever you need to do with it. 

EDIT

verwenden Wenn Sie diese viel tun, müssen Sie eine Funktion erstellen könnte es für Sie zu tun.

public class DefaultValue<T> extends Function<T, T> P{ 
    private final T t; 
    public DefaultValue(T t){ 
     this.t. = t; 
    } 

    public T apply(T t) { 
     return t == null ? this.t : t; 
    } 
} 

data.stream() 
    .map(new DefaultValue(someValue)); 
    // Do what you need to do 
2

Wenn Sie schauen, um die ursprünglichen Werte für die Einzelteile zu erhalten, die tun nicht Filter entsprechen, verwenden map mit ternären Logik:

  • Artikel, die Filter nicht passieren, werden zurückgegeben, wie sie ist
  • Elemente, die den Filter passieren lassen
  • verwandelt

Hier ein Beispiel:

Stream<String> stream = Arrays.stream(
    new String[]{"quick", null, "brown", "fox", null, "jumps"} 
); 
List<String> res = stream 
    .map(s -> s != null ? s : "<EMPTY>") 
    .collect(Collectors.toList()); 
for (String s : res) { 
    System.out.println(s); 
} 

Filterungslogik wird in dem bedingten Ausdruck in map eingebettet:

s -> s != null ? s : "<EMPTY>" // Using default values for null strings 

Demo.

Verwandte Themen