2015-11-11 19 views

Trả lời

8

Stream không có phương thức Stream.of(Collection). Nó không có một phương pháp

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

Nếu bạn vượt qua một Collection với phương pháp này, bạn sẽ nhận được một một yếu tố Stream<Collection> chứa (các Collection), không phải là một dòng của các yếu tố của bộ sưu tập.

Như một ví dụ, hãy thử này:

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)); 

Phiên bản đầu tiên in:

1 
2 
3 
4 
5 
6 

Thứ hai phiên bản in:

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

Lưu ý rằng nếu arr là một Object[] bạn có thể làm Stream.of(arr) để xem luồng các phần tử của mảng. Điều này là do có một phiên bản khác của of sử dụng varargs.

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

tôi thấy, nhờ giải thích –

+0

Tìm thấy ra rằng nó thực sự có thể sử dụng một mảng trong 'Stream.of' để tạo ra một dòng của các yếu tố của mảng –

+0

@AlexeyGalanov Đó là sự thật. Nếu 'arr' là một' Object [] 'bạn có thể làm' Arrays.stream (arr) 'hoặc' Stream.of (arr) '. Cả hai đều làm điều tương tự. Bạn không thể làm 'arr.stream()' mặc dù, vì vậy trong câu hỏi của bạn 'l1' và' l2' phải là các bộ sưu tập, không phải mảng. –

Các vấn đề liên quan