2017-01-28 32 views
6

mam kod:Stream liczb całkowitych

int[] values = { 1, 4, 9, 16 }; 
Stream<Integer> ints = Stream.of(values); 

który daje mi błąd kompilacji. Ale:

int[] values = { 1, 4, 9, 16 }; 
Stream<Integer> ints = Stream.of(new Integer[] {1, 4, 9, 16}); 

nie daje. Czemu?

Odpowiedz

12

W pierwszym przykładzie, są przechodzącą tablicę prymitywów int s do Stream#of która może przybrać jedną obiekt lub tablicę obiektu. Prymitywy nie są obiektami.

W drugim przykładzie kompiluje się, ponieważ przechodzi przez tablicę Integer.

Możesz użyć IntStream#of, która akceptuje tablice int.

4

Ponieważ int[] i Integer[] to różne typy. Pierwsza to tablica podstaw, druga to tablica obiektów o typie Integer.

Można użyć IntStream.of(int[]) lub Stream.of(Integer[])

4

Nieco związanych z ONZ, ale bardziej poprawne sposób zrobić byłoby:

Arrays.stream(values).boxed(); 
+0

Good one! Dziękuję Ci. – user1539343