Почему java stream.count() возвращает long?
Почему stream.count()
не возвращает int
?
Я понимаю, что я легко могу преобразовать long
в int
путем кастинга
return (int) players.stream().filter(Player::isActive).count();
но почему будет java stream.count()
возвращать long
вместо int
?
Ответы
Ответ 1
Ну просто потому, что это самое большое 64-битное примитивное значение, которое имеет java.
Другим способом будет два значения:
countLong/countInt
и это выглядело бы странно.
int
подходит для long
, но не наоборот. Все, что вы хотите сделать с помощью int, может вписаться в длинный, поэтому почему необходимо предоставить оба?
Ответ 2
Когда Java вышла в начале 1996 года, обычные ПК имели от 8 до 16 МБ памяти. Поскольку как массивы, так и коллекции были тесно связаны с размером памяти, использование int
для представления подсчетов элементов казалось естественным, поскольку было достаточно обратиться к массиву int
размером 4 ГБ - размер гигантский даже для жестких дисков в 1996 году, не говоря уже о RAM. Следовательно, использование long
вместо int
для размеров коллекции казалось бы расточительным в то время.
Хотя размер int
может быть ограниченным фактором в разы, разработчики Java не могут изменить его на long
, потому что это будет нарушение.
В отличие от коллекций Java потоки могут иметь потенциально неограниченное количество элементов, и они не содержат соображений совместимости. Поэтому использование long
с его более широким диапазоном значений кажется очень разумным выбором.