Optional<Integer> и OptionalInt

177
10 января 2018, 18:23

В чём отличие Optional<Integer> и OptionalInt, и в каких случаях какой из этих типов лучше применять?

Answer 1

Отличие в том, что при наличии значения Optional<Integer>.get вернет объект (Integer), а OptionalInt.getAsInt — примитивное значение (int).

Соответственно, чтобы избежать лишнего обертывания примитивных значений при работе с int применяется OptionalInt , а при работе с объектами IntegerOptional<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.

READ ALSO
android как правильно добавить к существующему приложению меню NavigationViewAndroid

android как правильно добавить к существующему приложению меню NavigationViewAndroid

Подскажите как правильно слить 2 проекта: один это выезжающее слева меню использующее ButterKnife, а второе шахматыМне надо добавить это меню к шахматам

187
Как узнать содержимое json файла

Как узнать содержимое json файла

Есть json файлВ нем либо объект (Map), либо массив (ArrayList)

209
Работа RandomAccessFile.seek()

Работа RandomAccessFile.seek()

Пожалуйста, объясните как работает данный методТо, что он перемещает курсор на определенную позицию в байтах это я знаю, но все равно у меня...

168
Отображение CoordinatorLayout

Отображение CoordinatorLayout

Вообщем у меня есть CoordinatorLayout и мну нужно его редактировать, но проблема в том, что его preview не отображается в android Studio? А запускать по 500 раз...

236