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>