Могу ли я не отображать /flatMap необязательноInt?

Почему, по-видимому, нет методов map()/flatMap() в НеобязательномInt или других примитивных необязательных вариантах?

Операции карты stream() позволяют преобразовать объекты и примитивы. Но почему Необязательно не использовать это?

OptionalInt profileId = OptionalInt.of(124);

Optional<Profile> profile = profileId.map(i -> getProfile(i));  //no such valid map() method!

Ответы

Ответ 1

Примитивные опции не имеют методов map, flatMap и фильтров по дизайну.

Кроме того, согласно Java8 в действии с .305, вы не должны их использовать. Причины использования примитива в потоках - это причины производительности. В случае огромного количества элементов значительная нагрузка на бокс/распаковка. Но это бессмысленно, поскольку в необязательном варианте есть только один элемент.

Кроме того, рассмотрим пример:

public class Foo {
    public Optional<Integer> someMethod() {
        return Optional.of(42);
    }
}

И использование в качестве ссылки на метод:

.stream()
.map(Foo::someMethod)

Если вы измените тип возвращаемого значения someMethod на НеобязательныйInt:

public OptionalInt someMethod() {
    return OptionalInt.of(42);
}

Вы не можете использовать его как ссылку на метод, и код не будет компилироваться:

.map(Foo::someMethod)

Ответ 2

Кажется, в Java 9 OptionalInt будет иметь метод stream, который дает вам IntStream с 0 или 1 элемент в нем. В этом потоке вы можете, конечно, использовать map(), flatMap() или filter() и т.д.

Для Java 8 мне нечего добавить в ответ user2138356s.