2015-11-11 7 views

Antwort

8

Stream hat keine Stream.of(Collection) Methode. Er hat eine Methode

static <T> Stream<T> of(T t) 

Wenn Sie ein Collection an diese Methode übergeben werden Sie ein Stream<Collection> enthält ein Element erhalten (die Collection), keinen Strom der Elemente der Sammlung.

Als Beispiel versuchen Sie dies:

List<Integer> l1 = Arrays.asList(1, 2, 3); 
List<Integer> l2 = Arrays.asList(4, 5, 6); 
Stream.of(l1, l2).flatMap((x)->x.stream()).forEach((x)->System.out.println(x)); 
Stream.of(l1, l2).flatMap((x)->Stream.of(x)).forEach((x)->System.out.println(x)); 

Die erste Version druckt:

1 
2 
3 
4 
5 
6 

Die zweite Version druckt:

[1, 2, 3] 
[4, 5, 6] 

Beachten Sie, dass, wenn arr ein Object[] ist Sie kann tun Stream.of(arr), um einen Strom der Elemente des Arrays zu erhalten. Dies liegt daran, dass es eine andere Version von of gibt, die Varargs verwendet.

static <T> Stream<T> of(T... values) 
+1

ich sehe, danke für Erklärung –

+0

Fand heraus, dass es tatsächlich möglich ist, ein Array in 'Stream.of' zu verwenden, um einen Strom der Elemente des Arrays zu erstellen –

+0

@AlexeyGalanov Das ist wahr. Wenn 'arr' ein' Objekt [] 'ist, können Sie' Arrays.stream (arr) 'oder' Stream.of (arr) 'tun. Beide machen das Gleiche. Sie können 'arr.stream()' jedoch nicht tun, also sollten in Ihrer Frage 'l1' und' l2' Sammlungen sein, keine Arrays. –

Verwandte Themen