{"id":310,"date":"2018-05-28T22:58:00","date_gmt":"2018-05-28T19:58:00","guid":{"rendered":"http:\/\/itserv55.beget.tech\/blog\/?p=310"},"modified":"2023-06-29T10:22:01","modified_gmt":"2023-06-29T07:22:01","slug":"obnovlyonnyj-udobnyj-optional-v-java-9","status":"publish","type":"post","link":"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/","title":{"rendered":"\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 Optional \u0432 Java 9"},"content":{"rendered":"<div class=\"r-phrase\">\r\n    <div class=\"r-phrase__author\">\r\n        <img decoding=\"async\" class=\"r-phrase__author-img\"\r\n             src=\"https:\/\/www.softlab.ru\/blog\/wp-content\/uploads\/2023\/06\/homenko.jpg\"\r\n             loading=\"lazy\"\r\n             alt=\"\"\r\n        >\r\n        <div>\r\n            <p class=\"r-phrase__author-title\">\u0421\u0435\u0440\u0433\u0435\u0439 \u0425\u043e\u043c\u0435\u043d\u043a\u043e<\/p>\r\n            <p class=\"r-phrase__author-text\">\u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0434\u0435\u043f\u0430\u0440\u0442\u0430\u043c\u0435\u043d\u0442\u0430 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, R-Style Softlab<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <div class=\"r-phrase__body\">\r\n                <p>\u041a\u043b\u0430\u0441\u0441 java.util.Optional \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 \u044f\u0437\u044b\u043a\u0435, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Java 8. \u0412 Java 9 \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 API. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 NullPointerException (NPE).<\/p>\n    <\/div>\r\n<\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">\u041b\u044e\u0431\u043e\u0439 Java-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0434\u0432\u0430 \u043b\u0438 \u043d\u0435 \u0441\u0430\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u043f\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 (NPE). \u0422\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0438\u0445 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438 \u0442\u043e\u0439, \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a\u043b\u0430\u0441\u0441&nbsp;java.util.Optional. \u0412\u043e\u0442 \u043e \u043d\u0435\u043c \u0438 \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 null \u0441 Optional \u0438 \u0431\u0435\u0437<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0427\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u0430\u0441\u044c \u0436\u0438\u0437\u043d\u044c java-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0441 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c&nbsp;Optional, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043a\u0430\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430&nbsp;null&nbsp;\u0434\u043e \u0432\u044b\u0445\u043e\u0434\u0430 Java 8 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>public class<\/strong>&nbsp;BAZ {<br><strong>private<\/strong>&nbsp;String&nbsp;<strong>code<\/strong>;<br><strong>public<\/strong>&nbsp;BAZ(Integer suffix) {<br><strong>this.code<\/strong>&nbsp;=&nbsp;<strong>&#8220;BAZ_&#8221;<\/strong>&nbsp;+ suffix;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br><strong>public<\/strong>&nbsp;String toString() {\u2026}<br><strong>public<\/strong>&nbsp;String getCode() {<strong>returncode<\/strong>;}<br>&nbsp;}<br><strong>public class<\/strong>&nbsp;BAR {<br><strong>private<\/strong>&nbsp;String&nbsp;<strong>code<\/strong>;<br><strong>private<\/strong>&nbsp;BAZ&nbsp;<strong>baz<\/strong>;<br><strong>public<\/strong>&nbsp;BAR(String code, Integer id) {<br><strong>this.code<\/strong>&nbsp;= code;<br><strong>if<\/strong>&nbsp;(id &gt; 50) {<br><strong>this.baz<\/strong>&nbsp;=&nbsp;<strong>new<\/strong>&nbsp;BAZ(id * 2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; @Override<br><strong>public<\/strong>&nbsp;String toString() {\u2026}<br><strong>public<\/strong>&nbsp;String getCode() {<strong>returncode<\/strong>;}<br><strong>public<\/strong>&nbsp;BAZ getBaz() {<strong>returnbaz<\/strong>;}<br>&nbsp;}<br><strong>public class<\/strong>&nbsp;FOO {<br><strong>private static final<\/strong>&nbsp;Random&nbsp;<strong><em>RANDOM<\/em><\/strong>&nbsp;=&nbsp;<strong>new<\/strong>&nbsp;Random();<br><strong>private<\/strong>&nbsp;String&nbsp;<strong>code<\/strong>;<br><strong>private<\/strong>&nbsp;List&lt;BAR&gt;&nbsp;<strong>bars<\/strong>;<br><strong>public<\/strong>&nbsp;FOO(String code) {<br><strong>this.code<\/strong>&nbsp;= code;<br><strong>this.bars<\/strong>&nbsp;=&nbsp;<strong><em>RANDOM<\/em>.<\/strong>ints(<strong><em>RANDOM<\/em>.<\/strong>nextInt(5),&nbsp;0,&nbsp;100)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .mapToObj(i -&gt; i % 2 &gt; 0 ? new BAR(&#8220;CODE_&#8221; + i, i) : null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .collect(Collectors.toList());<br>&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br><strong>public<\/strong>&nbsp;String toString() {\u2026}<br><strong>public<\/strong>&nbsp;String getCode() {<strong>returncode<\/strong>;}<br><strong>public<\/strong>&nbsp;List&nbsp;getBars() {<strong>returnbars<\/strong>;}<br>&nbsp;}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c&nbsp;code&nbsp;\u0438\u0437&nbsp;baz&nbsp;\u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e&nbsp;BAR&nbsp;\u0432 \u0441\u043f\u0438\u0441\u043a\u0435&nbsp;bars&nbsp;\u0443 \u043b\u044e\u0431\u043e\u0433\u043e&nbsp;FOO. \u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0433\u043b\u0430\u0434\u043a\u043e, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0441\u043b\u043e\u0432\u0443\u0442\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430&nbsp;null:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">@Test<br><strong>public void<\/strong>&nbsp;oldStyle() {<br><strong>for<\/strong>&nbsp;(FOO foo : foos) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&nbsp;bars = foo.getBars();<br><strong>if<\/strong>&nbsp;(bars ==&nbsp;<strong>null<\/strong>) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<strong><em>out<\/em><\/strong>.println(<strong>&#8220;FOO &#8216;bars&#8217; is null =&gt; nothing to do&#8221;<\/strong>);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;<strong>else<\/strong>&nbsp;{<br><strong>for<\/strong>&nbsp;(BAR bar : bars) {<br><strong>if<\/strong>&nbsp;(bar ==&nbsp;<strong>null<\/strong>) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<strong><em>out<\/em><\/strong>.println(<strong>&#8220;BAR is null =&gt; no BUZ indeed&#8221;<\/strong>);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;<strong>else<\/strong>&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BAZ baz = bar.getBaz();<br><strong>if<\/strong>&nbsp;(baz ==&nbsp;<strong>null<\/strong>) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<strong><em>out<\/em><\/strong>.println(<strong>&#8220;BAR is not null, but BUZ is&#8221;<\/strong>);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;<strong>else<\/strong>&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<strong><em>out<\/em><\/strong>.println(baz.getCode());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041a\u0430\u043a \u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u043d\u0430\u0435\u0442\u0435, \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0442\u043d\u0438 \u0438 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435. \u041d\u0435\u0434\u0430\u0440\u043e\u043c \u0432 Intellij IDEA \u0435\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d&nbsp;ifn&nbsp;\u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430&nbsp;null&nbsp;(\u0440\u0438\u0441. 1).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.softlab.ru\/upload\/medialibrary\/611\/ris1.jpg\" alt=\"ris1.jpg\" width=\"485\" height=\"72\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0420\u0438\u0441. 1. \u0428\u0430\u0431\u043b\u043e\u043d&nbsp;ifn&nbsp;\u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 null \u0432 Intellij IDEA<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u0430&nbsp;Optional, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 Java 8:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">@Test<br><strong>public void<\/strong>&nbsp;shinyNew8Style() {<br><em>foosWithNotOptionalsFields<\/em>.stream()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .map(FOO::getBars).map(Optional::ofNullable)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .flatMap(bars -&gt; bars.map(Stream::of).orElseGet(Stream::empty))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;.flatMap(Collection::stream)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .map(Optional::ofNullable).map(bar -&gt; bar.map(BAR::getBaz))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .map(baz -&gt; baz.map(BAZ::getCode))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .forEach(code -&gt; code.ifPresent(System.<strong><em>out<\/em><\/strong>::println));<br>&nbsp;}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0412\u043e\u0437\u044c\u043c\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u0432\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439&nbsp;One&nbsp;\u0438 \u0437\u0430\u043f\u0430\u0441\u043d\u043e\u0439&nbsp;Two. \u0412\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u0438, \u0435\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u044d\u0442\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c (\u0441\u0431\u043e\u0439 \u0441\u0432\u044f\u0437\u0438, \u043e\u0448\u0438\u0431\u043a\u0430 \u0411\u0414 \u0438 \u0434\u0440.), \u0432\u044b\u0434\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0434\u043b\u044f \u0435\u0435 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041a\u043e\u0434 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c&nbsp;Optional&nbsp;\u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">@Test<br>public void optionalEntity8Style() { BAR bar = BAR.getBARFromServiceOne(ID) .orElse(BAR.getBARFromServiceTwo(ID).orElseThrow(ERROR_SUPPLIER)); }<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Optional \u0432 Java 9: \u043d\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0412 Java 9 \u0432 \u043a\u043b\u0430\u0441\u0441&nbsp;Optional&nbsp;\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0442\u0440\u0438 \u043d\u043e\u0432\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430:&nbsp;stream(),&nbsp;ifPresentsOrElse() \u0438&nbsp;or(). \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Optional::stream.<\/strong>&nbsp;\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u043a\u0430\u043a \u0431\u044b \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0437\u0432\u0443\u0447\u0430\u043b\u043e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c&nbsp;Optional&nbsp;\u0432&nbsp;Stream. \u0415\u0441\u043b\u0438&nbsp;Optional::isPresent, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439&nbsp;Stream&nbsp;\u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c&nbsp;Optional::get, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435&nbsp;Stream&nbsp;\u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u043c. \u0423\u043f\u0440\u043e\u0441\u0442\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u043d\u0430&nbsp;null:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">@Test<br>public void shinyNew9Style() {<br><em>foosWithNotOptionalsFields<\/em>.stream()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .flatMap(foo -&gt; Optional.ofNullable(foo.getBars()).stream())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .flatMap(Collection::stream).map(Optional::ofNullable)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .flatMap(Optional::stream)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .flatMap(bar -&gt; Optional.ofNullable(bar.getBaz()).stream())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .forEach(baz -&gt; System.<em><strong>out<\/strong><\/em>.println(baz.getCode())); }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0417\u0434\u0435\u0441\u044c \u043a\u0430\u0436\u0434\u044b\u0439&nbsp;Stream, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437&nbsp;Optional, \u0443\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043d\u0430&nbsp;null&nbsp;\u043e\u0442\u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u043e\u0432\u0441\u0435! \u0412\u044b\u0437\u043e\u0432&nbsp;bar.getBaz()&nbsp;\u0432 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438&nbsp;baz&nbsp;\u0438 \u0431\u044b\u043b&nbsp;.empty, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a&nbsp;Stream&nbsp;\u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439&nbsp;null.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Optional::or.<\/strong>&nbsp;\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442&nbsp;Optional. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u0435\u0449\u0435 \u043f\u0430\u0440\u043e\u0447\u043a\u0443 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 (\u0440\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u00ab\u0446\u0435\u043f\u043e\u0447\u043a\u0443\u00bb \u043d\u0430 Java 8):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">@Test<br><strong>public void<\/strong>&nbsp;optionalEntity9Style() {<br>&nbsp; &nbsp; BAR bar = BAR.getBARFromServiceOne(<em><strong>ID<\/strong><\/em>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .or(() -&gt; BAR.getBARFromServiceTwo(<strong><em>ID<\/em><\/strong>))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .or(() -&gt; BAR.getBARFromServiceThree(<strong><em>ID<\/em><\/strong>))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .or(() -&gt; BAR.getBARFromServiceFour(<em><strong>ID<\/strong><\/em>))<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; .orElseThrow(<strong><em>ERROR_SUPPLIER<\/em><\/strong>); }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Optional::ifPresentOrElse.<\/strong>&nbsp;\u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432&nbsp;Optional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">@Test<br><strong>public void<\/strong>&nbsp;optionalEntityIfPresentOrElse() {<br>&nbsp;&nbsp;&nbsp; BAR.getBARFromServiceOne(ID)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .or(() -&gt; BAR.getBARFromServiceTwo(<strong><em>ID<\/em><\/strong>))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .or(() -&gt; BAR.getBARFromServiceThree(<strong><em>ID<\/em><\/strong>))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .or(() -&gt; BAR.getBARFromServiceFour(<em><strong>ID<\/strong><\/em>))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ifPresentOrElse(System.<strong><em>out<\/em><\/strong>::println,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; () -&gt; System.<strong><em>out<\/em><\/strong>.println(<strong>&#8220;\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c BAR&#8221;<\/strong>));<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Java 10 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0437\u0430\u043c\u0435\u0442\u044f\u0442 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430&nbsp;Optional&nbsp;\u2014&nbsp;orElseThrow(). \u041f\u043e \u0441\u0443\u0442\u0438, \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438&nbsp;get(), \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437&nbsp;Optional, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u043e\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438\u0431\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435&nbsp;NoSuchElementException. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0430\u0432\u0442\u043e\u0440\u044b \u044f\u0437\u044b\u043a\u0430 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e&nbsp;orElseThrow()&nbsp;\u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u0430&nbsp;get(), \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u043e \u0438\u0445 \u043c\u043d\u0435\u043d\u0438\u044e, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0430\u0441\u043d\u044b\u043c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0432\u043e\u0435\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435 \u0438 \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435&nbsp;Optional&nbsp;\u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c&nbsp;if()\u2026else(). \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c&nbsp;Optional&nbsp;\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0438\u043f\u0430 \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u2014 \u043f\u043b\u043e\u0445\u0430\u044f \u0438\u0434\u0435\u044f, \u043d\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438.&nbsp;<a href=\"https:\/\/stackoverflow.com\/questions\/26327957\/should-java-8-getters-return-optional-type\/26328555#26328555\">\u041a\u0430\u043a \u0437\u0430\u043c\u0435\u0442\u0438\u043b Brian Goetz<\/a>&nbsp;(Senior Java Language Architect \u0432 Oracle, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0434 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c \u044f\u0437\u044b\u043a\u0430 \u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Java), \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432 \u044f\u0437\u044b\u043a \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u00ab\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u00bb, \u043d\u0435 \u043f\u0440\u0438\u0431\u0435\u0433\u0430\u044f \u043a&nbsp;null.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041b\u044e\u0431\u043e\u0439 Java-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0434\u0432\u0430 \u043b\u0438 \u043d\u0435 \u0441\u0430\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u043f\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 (NPE). \u0422\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0438\u0445 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438 \u0442\u043e\u0439, \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a\u043b\u0430\u0441\u0441&nbsp;java.util.Optional. \u0412\u043e\u0442 \u043e \u043d\u0435\u043c \u0438 \u043f\u043e\u0439\u0434\u0435\u0442 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":312,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-310","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologies"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 Optional \u0432 Java 9<\/title>\n<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/\" \/>\n<meta property=\"og:locale\" content=\"ru_RU\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 Optional \u0432 Java 9\" \/>\n<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/\" \/>\n<meta property=\"og:site_name\" content=\"\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0431\u043b\u043e\u0433 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 R-Style Softlab\" \/>\n<meta property=\"article:published_time\" content=\"2018-05-28T19:58:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-29T07:22:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.softlab.ru\/blog\/wp-content\/uploads\/2023\/06\/titul_big.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"420\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"\u041b\u044e\u0434\u043c\u0438\u043b\u0430 \u041a\u043e\u0440\u043c\u0443\u0445\u0438\u043d\u0430\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u041b\u044e\u0434\u043c\u0438\u043b\u0430 \u041a\u043e\u0440\u043c\u0443\u0445\u0438\u043d\u0430\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 \u043c\u0438\u043d\u0443\u0442\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/\",\"url\":\"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/\",\"name\":\"\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 Optional \u0432 Java 9\",\"isPartOf\":{\"@id\":\"https:\/\/www.softlab.ru\/blog\/#website\"},\"datePublished\":\"2018-05-28T19:58:00+00:00\",\"dateModified\":\"2023-06-29T07:22:01+00:00\",\"author\":{\"@id\":\"https:\/\/www.softlab.ru\/blog\/#\/schema\/person\/80131d151c8f6a0cc3d67200a931711f\"},\"description\":\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445\",\"breadcrumb\":{\"@id\":\"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/#breadcrumb\"},\"inLanguage\":\"ru-RU\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\",\"item\":\"https:\/\/www.softlab.ru\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 Optional \u0432 Java 9\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.softlab.ru\/blog\/#website\",\"url\":\"https:\/\/www.softlab.ru\/blog\/\",\"name\":\"\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0431\u043b\u043e\u0433 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 R-Style Softlab\",\"description\":\"\u0420\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 Fintech \u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0437\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.softlab.ru\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"ru-RU\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.softlab.ru\/blog\/#\/schema\/person\/80131d151c8f6a0cc3d67200a931711f\",\"name\":\"\u041b\u044e\u0434\u043c\u0438\u043b\u0430 \u041a\u043e\u0440\u043c\u0443\u0445\u0438\u043d\u0430\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ru-RU\",\"@id\":\"https:\/\/www.softlab.ru\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9cbe810aba8e83e379ac81d7ecc6ac838bf11f8ef7d998953501bd48813b3e6d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9cbe810aba8e83e379ac81d7ecc6ac838bf11f8ef7d998953501bd48813b3e6d?s=96&d=mm&r=g\",\"caption\":\"\u041b\u044e\u0434\u043c\u0438\u043b\u0430 \u041a\u043e\u0440\u043c\u0443\u0445\u0438\u043d\u0430\"},\"url\":\"https:\/\/www.softlab.ru\/blog\/author\/nazarova\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 Optional \u0432 Java 9","description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/","og_locale":"ru_RU","og_type":"article","og_title":"\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 Optional \u0432 Java 9","og_description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445","og_url":"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/","og_site_name":"\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0431\u043b\u043e\u0433 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 R-Style Softlab","article_published_time":"2018-05-28T19:58:00+00:00","article_modified_time":"2023-06-29T07:22:01+00:00","og_image":[{"width":700,"height":420,"url":"https:\/\/www.softlab.ru\/blog\/wp-content\/uploads\/2023\/06\/titul_big.jpg","type":"image\/jpeg"}],"author":"\u041b\u044e\u0434\u043c\u0438\u043b\u0430 \u041a\u043e\u0440\u043c\u0443\u0445\u0438\u043d\u0430","twitter_card":"summary_large_image","twitter_misc":{"\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c":"\u041b\u044e\u0434\u043c\u0438\u043b\u0430 \u041a\u043e\u0440\u043c\u0443\u0445\u0438\u043d\u0430","\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f":"5 \u043c\u0438\u043d\u0443\u0442"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/","url":"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/","name":"\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 Optional \u0432 Java 9","isPartOf":{"@id":"https:\/\/www.softlab.ru\/blog\/#website"},"datePublished":"2018-05-28T19:58:00+00:00","dateModified":"2023-06-29T07:22:01+00:00","author":{"@id":"https:\/\/www.softlab.ru\/blog\/#\/schema\/person\/80131d151c8f6a0cc3d67200a931711f"},"description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445","breadcrumb":{"@id":"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/#breadcrumb"},"inLanguage":"ru-RU","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.softlab.ru\/blog\/obnovlyonnyj-udobnyj-optional-v-java-9\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/www.softlab.ru\/blog\/"},{"@type":"ListItem","position":2,"name":"\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 Optional \u0432 Java 9"}]},{"@type":"WebSite","@id":"https:\/\/www.softlab.ru\/blog\/#website","url":"https:\/\/www.softlab.ru\/blog\/","name":"\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0431\u043b\u043e\u0433 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 R-Style Softlab","description":"\u0420\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 Fintech \u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0437\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.softlab.ru\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"ru-RU"},{"@type":"Person","@id":"https:\/\/www.softlab.ru\/blog\/#\/schema\/person\/80131d151c8f6a0cc3d67200a931711f","name":"\u041b\u044e\u0434\u043c\u0438\u043b\u0430 \u041a\u043e\u0440\u043c\u0443\u0445\u0438\u043d\u0430","image":{"@type":"ImageObject","inLanguage":"ru-RU","@id":"https:\/\/www.softlab.ru\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9cbe810aba8e83e379ac81d7ecc6ac838bf11f8ef7d998953501bd48813b3e6d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9cbe810aba8e83e379ac81d7ecc6ac838bf11f8ef7d998953501bd48813b3e6d?s=96&d=mm&r=g","caption":"\u041b\u044e\u0434\u043c\u0438\u043b\u0430 \u041a\u043e\u0440\u043c\u0443\u0445\u0438\u043d\u0430"},"url":"https:\/\/www.softlab.ru\/blog\/author\/nazarova\/"}]}},"_links":{"self":[{"href":"https:\/\/www.softlab.ru\/blog\/wp-json\/wp\/v2\/posts\/310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.softlab.ru\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.softlab.ru\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.softlab.ru\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.softlab.ru\/blog\/wp-json\/wp\/v2\/comments?post=310"}],"version-history":[{"count":3,"href":"https:\/\/www.softlab.ru\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions"}],"predecessor-version":[{"id":323,"href":"https:\/\/www.softlab.ru\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions\/323"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.softlab.ru\/blog\/wp-json\/wp\/v2\/media\/312"}],"wp:attachment":[{"href":"https:\/\/www.softlab.ru\/blog\/wp-json\/wp\/v2\/media?parent=310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.softlab.ru\/blog\/wp-json\/wp\/v2\/categories?post=310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.softlab.ru\/blog\/wp-json\/wp\/v2\/tags?post=310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}