HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Метод findFirst() используется в связке с filter() для поиска первого элемента, соответствующего условию фильтрации.</p>
1 <p>Метод findFirst() используется в связке с filter() для поиска первого элемента, соответствующего условию фильтрации.</p>
2 <p>Так как findFirst() ищет ровно один элемент, то его результатом является одно значение, а не стрим. Но в отличие от свертки, где результат это то, что находится в аккумуляторе, в случае findFirst() в качестве результата возвращается особый тип данных Optional. Что это и зачем оно нужно?</p>
2 <p>Так как findFirst() ищет ровно один элемент, то его результатом является одно значение, а не стрим. Но в отличие от свертки, где результат это то, что находится в аккумуляторе, в случае findFirst() в качестве результата возвращается особый тип данных Optional. Что это и зачем оно нужно?</p>
3 <p>По логике кажется, что возвратом должно быть либо конкретное значение если оно найдено, либо null. Но в таком случае возникает необходимость постоянной проверки на наличие значения if (value != null). Главная проблема в том, что если забыть сделать ее проверку, компилятор ругаться не будет, null является валидным значением для любых не примитивных типов. И такое постоянно происходит в тех местах, где возвратом может быть null. Исключение NullPointerException одно из самых распространенных в работающих программах на Java.</p>
3 <p>По логике кажется, что возвратом должно быть либо конкретное значение если оно найдено, либо null. Но в таком случае возникает необходимость постоянной проверки на наличие значения if (value != null). Главная проблема в том, что если забыть сделать ее проверку, компилятор ругаться не будет, null является валидным значением для любых не примитивных типов. И такое постоянно происходит в тех местах, где возвратом может быть null. Исключение NullPointerException одно из самых распространенных в работающих программах на Java.</p>
4 <p>Чтобы этого не происходило в язык ввели тип Optional. Это тип обертка, который хранит реальное значение внутри себя предоставляя к нему доступ через различные методы. Вот как выглядит работа с этим типом:</p>
4 <p>Чтобы этого не происходило в язык ввели тип Optional. Это тип обертка, который хранит реальное значение внутри себя предоставляя к нему доступ через различные методы. Вот как выглядит работа с этим типом:</p>
5 <p>Все это работает потому, что отсутствие значения в Optional не равно null. Optional создается следующим образом:</p>
5 <p>Все это работает потому, что отсутствие значения в Optional не равно null. Optional создается следующим образом:</p>
6 <ul><li>Optional.empty(): создает Optional в случае если значение отсутствует.</li>
6 <ul><li>Optional.empty(): создает Optional в случае если значение отсутствует.</li>
7 <li>Optional.of(value): создает Optional с value внутри.</li>
7 <li>Optional.of(value): создает Optional с value внутри.</li>
8 <li>Optional.ofNullable(value): работает как empty() если значение null, иначе как of().</li>
8 <li>Optional.ofNullable(value): работает как empty() если значение null, иначе как of().</li>
9 </ul><h2>Основные методы Optional</h2>
9 </ul><h2>Основные методы Optional</h2>
10 <ul><li>get(): Возвращает значение если оно есть иначе выбрасывается исключение NoSuchElementException.</li>
10 <ul><li>get(): Возвращает значение если оно есть иначе выбрасывается исключение NoSuchElementException.</li>
11 <li>isPresent(): Возвращает true если значение представлено.</li>
11 <li>isPresent(): Возвращает true если значение представлено.</li>
12 <li>orElse(defaultValue): Возвращает значение если оно есть иначе возвращается defaultValue.</li>
12 <li>orElse(defaultValue): Возвращает значение если оно есть иначе возвращается defaultValue.</li>
13 <li>orElseThrow(exceptionSupplier): Возвращает значение, если оно существует, иначе выбрасывает исключение, созданное внутри exceptionSupplier.</li>
13 <li>orElseThrow(exceptionSupplier): Возвращает значение, если оно существует, иначе выбрасывает исключение, созданное внутри exceptionSupplier.</li>
14 </ul>
14 </ul>