Ответ 1
Вы можете использовать Arrays.stream, например.
Arrays.stream(array);
Вы также можете использовать Stream.of
, как указано @fge, который выглядит как
public static<T> Stream<T> of(T... values) {
return Arrays.stream(values);
}
Но примечание Stream.of(intArray)
вернет Stream<int[]>
, тогда как Arrays.stream(intArr)
вернет IntStream
, предоставив вам передать массив типа int[]
. Таким образом, в двух словах для типа примитивов вы можете наблюдать разницу между двумя методами, например.
int[] arr = {1, 2};
Stream<int[]> arr1 = Stream.of(arr);
IntStream stream2 = Arrays.stream(arr);
Когда вы передаете примитивный массив в Arrays.stream
, вызывается следующий код
public static IntStream stream(int[] array) {
return stream(array, 0, array.length);
}
и когда вы передаете примитивный массив в Stream.of
, вызывается следующий код
public static<T> Stream<T> of(T t) {
return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
}
Следовательно, вы получаете разные результаты.
Обновлено: как указано в комментариях Стюарта
Перегрузка поддиапазона Arrays.stream
предпочтительнее использования Stream.of(array).skip(n).limit(m)
, потому что первая приводит к потоку SIZED, в то время как последний не работает. Причина в том, что limit(m)
не знает, является ли размер m или меньше m, тогда как Arrays.stream
выполняет проверку диапазона и знает точный размер потока
Вы можете прочитать исходный код для реализации потока, возвращенный Arrays.stream(array,start,end)
здесь, тогда как для реализации потока, возвращаемой Stream.of(array).skip().limit()
, находится внутри этот метод.