Для этого нет ничего встроенного, но относительно просто реализовать такой диапазон, как неизменяемый Iterable<Long>
(или Integer
или любой другой). Просто создайте пользовательский Iterator
, который начинается с начального значения, а затем увеличивается для каждого вызова до next()
, пока вы не передадите конечное значение. Вы должны решить, как и если вы хотите обрабатывать итерацию от высокого к низкому уровню и тому подобное, но это не сложно. Вы также можете сделать это как неизменяемую реализацию List
, где значение для каждого индекса рассчитывается по требованию (start + index * increment
).
Хотя ваш вопрос касается создания «массива» на основе диапазона, массив, полный данных по всему диапазону, часто не требуется, особенно если вы просто хотите перебирать числа в диапазоне. Если это все, что вам нужно, вы в конечном итоге перебираете числа в диапазоне дважды , чтобы создать массив или List
, а затем читаете его. Использование итератора с отложенным диапазоном, как я описал, не имеет этого недостатка. Кроме того, ленивый итератор может быть легко скопирован в List
, если вы хотите, чтобы все значения хранились непосредственно в памяти. Единственный недостаток по сравнению с созданием массива - некоторые накладные расходы на автобокс.