Ответ 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)