В чём отличие Optional<Integer>
и OptionalInt
, и в каких случаях какой из этих типов лучше применять?
Отличие в том, что при наличии значения Optional<Integer>.get
вернет объект (Integer
), а OptionalInt.getAsInt
— примитивное значение (int
).
Соответственно, чтобы избежать лишнего обертывания примитивных значений при работе с int
применяется OptionalInt
, а при работе с объектами Integer
— Optional<Integer>
.
Рассмотрим на примере интерфейса с двумя методами:
interface Test {
int getInt();
Integer getInteger();
}
При обработке значений имеет смысл использовать соответствующие классы (на примере Stream API):
List<Test> list = //получаем список
OptionalInt intFirst = list.stream().mapToInt(Test::getInt).findFirst();
Optional<Integer> integerFirst = list.stream().map(Test::getInteger).findFirst();
Использование IntStream
и OptionalInt
для поля типа Integer
потенциально приведет к NullPointerException
. Использование Optional<Integer>
и Stream<Integer>
для int
приведет к лишнему обертыванию значений.
Необходимость специальных классов обусловлена тем, что в Java примитивные типы не могут использоваться в качестве параметров обобщенных типов. Из за этого классы Stream<T>
и Optional<T>
не могут быть использованы для работы с примитивными значениями.
Использовать вместо примитивов классы-обертки непозволительно из-за затрат производительности на упаковку значений в объекты. Поэтому для часто используемых примитивных типов создан набор специальных классов: IntStream
, LongStream
, DoubleStream
и OptionalInt
, OptionalLong
, OptionalDouble
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите как правильно слить 2 проекта: один это выезжающее слева меню использующее ButterKnife, а второе шахматыМне надо добавить это меню к шахматам
Пожалуйста, объясните как работает данный методТо, что он перемещает курсор на определенную позицию в байтах это я знаю, но все равно у меня...
Вообщем у меня есть CoordinatorLayout и мну нужно его редактировать, но проблема в том, что его preview не отображается в android Studio? А запускать по 500 раз...