1. Обзор
В этом уроке мы рассмотрим различные способы перечисления последовательностей чисел в пределах диапазона.
2. Перечисление номеров в диапазоне
2.1. Традиционный для цикла
Мы можем использовать традиционный цикл for для генерации чисел в заданном диапазоне:
public ListgetNumbersInRange(int start, int end) { List result = new ArrayList<>(); for (int i = start; i < end; i++) { result.add(i); } return result; }
Приведенный выше код создаст список, содержащий номера от start (включительно) до end (эксклюзивно).
2.2. JDK 8 IntStream.range
IntStream , введенный в JDK 8, может использоваться для генерации чисел в заданном диапазоне, устраняя необходимость в цикле for :
public ListgetNumbersUsingIntStreamRange(int start, int end) { return IntStream.range(start, end) .boxed() .collect(Collectors.toList()); }
2.3. IntStream.rangeClosed
В предыдущем разделе end является эксклюзивным. Чтобы получить числа в диапазоне, где end является включающим, есть IntStream.rangeClosed :
public ListgetNumbersUsingIntStreamRangeClosed(int start, int end) { return IntStream.rangeClosed(start, end) .boxed() .collect(Collectors.toList()); }
2.4. IntStream.iterate
В предыдущих разделах для получения последовательности чисел использовался диапазон. Когда мы знаем, сколько чисел в последовательности необходимо, мы можем использовать IntStream.iterate :
public ListgetNumbersUsingIntStreamIterate(int start, int limit) { return IntStream.iterate(start, i -> i + 1) .limit(limit) .boxed() .collect(Collectors.toList()); }
Здесь параметр limit ограничивает количество элементов для итерации.
3. Заключение
В этой статье мы рассмотрели различные способы генерации чисел в пределах диапазона.
Фрагменты кода, как всегда, можно найти на GitHub .