Является ли API для `Random.ints (origin, bound)`, `.longs (origin, bound)` и т. Д. Отсутствующей функциональностью? - PullRequest
0 голосов
/ 09 марта 2019

Мне кажется, что невозможно включить Integer.MAX_VALUE и Long.MAX_VALUE в качестве возможных случайных значений при создании IntStream или LongStream с использованием границ с классом java.util.Random .

Это похоже на досадный недосмотр. Я могу понять, почему они пытались соответствовать версии .doubles(), но она делает любую попытку получить поток случайных int с или long с, который может включать максимальное значение (но не полный диапазон значения, очевидно, так как существуют методы, которые это делают) намного сложнее, чем нужно.

Я что-то упустил или это обсуждалось в другом месте?

1 Ответ

0 голосов
/ 09 марта 2019

Вы правы. Javadoc утверждает, что верхняя граница является исключительной. Это означает, что вы не можете использовать ints(lower, upper) для получения потока, включающего Integer.MAX_VALUE.

Обоснование

Это, возможно, крайний случай, который дизайнеры не рассматривали для начала с 1 , или который, по их мнению, не стоил «исправления», усложняющего API.

Обратите внимание, что Random.nextInt(bound) имеет такую ​​же проблему, поэтому этот недостаток в Random присутствует с Java 1.2. Следовательно, другая возможность заключается в том, что разработчики знали об этом недостатке, когда добавляли методы ints(...) и longs(...), но решили не устранять его, поскольку это приведет к неловкому несоответствию со старыми методами.

1 - Это маловероятно, ИМО. Команда Java была умными людьми. И из исходного кода ясно, что они хорошо знают об этом сейчас.


В любом случае ... если вам нужны потоки случайных чисел с диапазоном, включающим MAX_VALUE с, вы можете использовать перегрузки без аргументов (ints() и longs()) и фильтровать потоки. Кроме того, вы можете накатывать свои собственные потоки.

...