2017-12-27 19 views
-3

Ich habe eine Liste von Objekten, wie unten dargestellt, soll Standardwert für das Element geben, wo die Anzahl der Stunden ist nullJava 8 Stream-Standardwert gibt Elemente auf null

[java, 10 Stunden]
[ Python, 2 Stunden]
[node, 1 Stunde]
[c, null] < --- nULL
[Rubin, 4 Stunden]
[Swift, null] < --- nULL
[php, 2 Stunden]

Erwartet:

[Java, 10 Stunden]
[Python, 2 Stunden]
[node, 1 Stunde]
[c, default]
[Rubin, 4 Stunden]
[Swift, default]
[php, 2 Stunden]

+0

Ist ein Stream erforderlich, wäre keine for-Schleife ausreichend? –

+1

Bitte zeigen Sie, was Sie bisher versucht haben. –

Antwort

0
List<String[]> list = Arrays.asList(
      new String[] {"java", "10 housrs"}, 
      new String[] {"python", null} 
    ); 
    list.stream().filter(pair -> pair[1] == null).forEach(pair -> pair[1] = "default value"); 
    list.forEach(pair -> System.out.printf("%s => %s\n", pair[0], pair[1])); 

==

java => 10 housrs 
python => default value 
+5

Verwenden Sie 'map', um Nebenwirkungen zu vermeiden – Dummy

+0

@Dummy Die Verwendung der Karte kann die Reihenfolge der Elemente in der Liste ändern. –

+1

Von der ursprünglichen Frage, ist die Reihenfolge eindeutig kein Problem – Dummy

1

Sie eine if in einer map-Anweisung verwenden können, um zu erreichen, was Sie sich wünschen:

List<String[]> newList = list.stream() 
    .map(e-> { 
     String newVal = e[1]; 
     if(newVal == null){ 
      newVal = "defaultValue"; 
     } 
     return new String[]{e[0], newVal}; 
    }) 
    .collect(Collectors.toList()); 

Sie können sehen, dass ich in der Karte Operation ein neues Array erstellt. Das ist besser als das Editieren des bereits vorhandenen, weil auf diese Weise keine Nebenwirkungen auftreten.

Für weitere Informationen über map() haben einen Blick auf the docs

Aber warum nicht ein foreach -loop in erster Linie verwenden, auf diese Weise ist es leichter zu verstehen, was Sie wirklich erreichen wollen, gibt ist auch kein Overhead ein Stream bei der Schaffung von: Schleifen

for(String[] e : list){ 
    if(e[1] == null){ 
     e[1] = "defaultValue"; 
    } 
} 

Es ist nicht immer eine gute Idee, nur um sich selbst zu zwingen Ströme zu verwenden, wenn Sie nur eine gute ol verwenden können‘.

Verwandte Themen