[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-8-chto-takoe-optional":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},360,"chto-takoe-optional",10,"java-8","Java 8+","☕","Что такое Optional?","`Optional\u003CT>` — контейнер-обёртка, который может содержать или не содержать ненулевое значение. Он предоставляет декларативный способ работы с потенциально отсутствующими значениями вместо ручных `if (x != null)` проверок, что снижает вероятность `NullPointerException`.\n\n> **Аналогия из жизни:** `Optional` — это коробка, на которой написано «может быть пустой». Прежде чем достать содержимое, вы проверяете, есть ли что-то внутри, или определяете, что делать, если коробка пуста.\n\n```java\nOptional\u003CString> optional = Optional.of(\"hello\");\n\noptional.isPresent();                              \u002F\u002F true\noptional.ifPresent(s -> System.out.println(s));    \u002F\u002F hello\noptional.get();                                     \u002F\u002F \"hello\"\noptional.orElse(\"default\");                         \u002F\u002F \"hello\"\noptional.map(String::toUpperCase).orElse(\"\");       \u002F\u002F \"HELLO\"\n```\n\n### Основные способы создания\n\n| Метод | Описание |\n|-------|----------|\n| `Optional.of(value)` | Оборачивает ненулевое значение (NPE если null) |\n| `Optional.ofNullable(value)` | Оборачивает значение, допуская null |\n| `Optional.empty()` | Возвращает пустой Optional |\n\n### Основные методы\n\n| Метод | Описание |\n|-------|----------|\n| `isPresent()` | Возвращает `true`, если значение есть |\n| `ifPresent(consumer)` | Выполняет действие, если значение есть |\n| `get()` | Возвращает значение или бросает `NoSuchElementException` |\n| `orElse(default)` | Возвращает значение или дефолт |\n| `orElseGet(supplier)` | Возвращает значение или вычисляет дефолт лениво |\n| `orElseThrow(supplier)` | Возвращает значение или бросает исключение |\n| `map(function)` | Преобразует значение, если оно есть |\n| `flatMap(function)` | Как `map`, но функция сама возвращает Optional |\n| `filter(predicate)` | Возвращает Optional, если значение удовлетворяет условию |\n\n> **На собеседовании:** не используйте `Optional` как поле класса, параметр метода или элемент коллекции — он предназначен исключительно для возвращаемых значений. Также важно различать `orElse()` (вычисляет дефолт всегда) и `orElseGet()` (вычисляет лениво).","","junior",[15],"java8",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое Optional? — Gymterview","`Optional\u003CT>` — контейнер-обёртка, который может содержать или не содержать ненулевое значение. Он предоставляет декларативный способ работы с потенциально отсу","`Optional\u003CT>` — контейнер-обёртка, который может содержать или не содержать ненулевое значение. Он предоставляет деклара",[15,13],"`Optional\u003CT>` — контейнер-обёртка, который может содержать или не содержать ненулевое значение. Он предоставляет декларативный способ работы с потенциально отсутствующими значениями вместо ручных `if (x != null)` проверок, что снижает вероятность `NullPointerException`.",true]