{"id":272592,"date":"2016-01-21T13:24:03","date_gmt":"2016-01-21T10:24:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=272592"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=272592","title":{"rendered":"Stream API: \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f"},"content":{"rendered":"<p>       \u042f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/github.com\/amaembo\/streamex\">StreamEx<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 Java 8 Stream API, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0442\u0443\u0434\u0430 \u043d\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0441\u0442\u0440\u0438\u043c\u043e\u0432. \u041e\u0431\u044b\u0447\u043d\u043e \u044f \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u0432\u0441\u0451 \u043f\u043e\u0434\u0440\u044f\u0434, \u0430 \u0432\u0441\u0435\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0438\u0447\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 (<a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/stream\/package-summary.html#StreamOps\">intermediate<\/a>) \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0442\u0430\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<ol>\n<li>\u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438?<\/li>\n<li>\u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u043b\u0435\u043d\u0438\u0432\u043e\u0439 \u0438 \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0435\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f?<\/li>\n<li>\u0421\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u043d\u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0442\u0440\u0438\u043c\u0435? \u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438?<\/li>\n<li>\u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c\u0441\u044f?<\/li>\n<\/ol>\n<p>  \u041c\u0438\u043d\u0443\u0441\u0438\u043a \u043f\u043e \u043b\u044e\u0431\u043e\u043c\u0443 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u0438 \u0442\u0430\u043a\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e. \u041c\u0438\u043d\u0443\u0441\u0438\u043a \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u2014 \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0432 \u0432 jOO\u03bb \u0435\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f <a href=\"http:\/\/www.jooq.org\/products\/jOO%CE%BB\/javadoc\/0.9.7\/org\/jooq\/lambda\/Seq.html#shuffle--\">shuffle()<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0430\u044f, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u044f\u043c\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u044f\u0435\u0442 \u0432\u0435\u0441\u044c \u0441\u0442\u0440\u0438\u043c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0440\u0438\u043c. \u042f \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u0443\u0432\u0430\u0436\u0430\u044e.<\/p>\n<p>  \u041c\u0438\u043d\u0443\u0441\u0438\u043a\u0438 \u043f\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0443\u043d\u043a\u0442\u0430\u043c \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0445 \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0442. \u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0443\u043d\u043a\u0442 \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442 <code>flatMap()<\/code>, \u0442\u0440\u0435\u0442\u0438\u0439 \u2014 <code>sorted()<\/code>, \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u2014 \u0432\u0441\u044f\u043a\u0438\u0435 <code>limit()<\/code> \u0438 <code>takeWhile()<\/code> (\u0432 JDK-9). \u041d\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u044f \u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u0434\u043d\u044f\u0445 \u044f \u043e\u0442\u043a\u0440\u044b\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043b\u043e\u0445\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u0441\u044f \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0442\u0440\u0438\u043c\u0435, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0445\u043e\u0440\u043e\u0448\u0430. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u0451 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u044e\u0431\u0443\u044e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u0442\u0430\u043a \u0438 \u043a\u0443\u0447\u0443 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445. \u042f \u043d\u0430\u0437\u0432\u0430\u043b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e <a href=\"http:\/\/amaembo.github.io\/streamex\/javadoc\/one\/util\/streamex\/StreamEx.html#headTail-java.util.function.BiFunction-java.util.function.Supplier-\">headTail()<\/a>.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041c\u0435\u0442\u043e\u0434 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0432\u0435\u0437\u0434\u0435 \u043d\u0438\u0436\u0435 \u043e\u043f\u0443\u0441\u043a\u0430\u044e <a href=\"http:\/\/habrahabr.ru\/post\/207360\/\">PECS<\/a> \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438):<\/p>\n<pre><code class=\"java\">&lt;R&gt; StreamEx&lt;R&gt; headTail(BiFunction&lt;T, StreamEx&lt;T&gt;, Stream&lt;R&gt;&gt; mapper, Supplier&lt;Stream&lt;R&gt;&gt; supplier)<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0432\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430: \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0438\u043c\u0430 \u0438 \u0441\u0442\u0440\u0438\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u044d\u0442\u0438\u043c \u0432\u0441\u0451 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0440\u0438\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u043d\u0438\u0436\u0435\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c. \u0412\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0438\u043c \u0442\u043e\u0433\u043e \u0436\u0435 \u0442\u0438\u043f\u0430, \u0447\u0442\u043e \u0438 \u043f\u0435\u0440\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u041e\u043d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0440\u0438\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c. \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u0440\u0438\u043c\u0430.<\/p>\n<p>  \u0427\u0430\u0441\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u0438\u043c (\u0435\u0441\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0440\u0438\u043c \u043f\u0443\u0441\u0442, \u0442\u043e \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0443\u0441\u0442), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c:<\/p>\n<pre><code class=\"java\">&lt;R&gt; StreamEx&lt;R&gt; headTail(BiFunction&lt;T, StreamEx&lt;T&gt;, Stream&lt;R&gt;&gt; mapper)<\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">StreamEx.of(&quot;name&quot;, &quot;John&quot;, &quot;Mary&quot;, &quot;Lucy&quot;)         .headTail((head, tail) -&gt; tail.map(str -&gt; head+&quot;: &quot;+str))         .forEach(System.out::println);<\/code><\/pre>\n<p>  \u0412\u044b\u0432\u043e\u0434:<\/p>\n<pre><code class=\"java\">name: John name: Mary name: Lucy<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0443\u0441\u0438\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0440\u0438\u043c\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438. \u041d\u043e \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0443\u0447\u043d\u043e. \u0418\u0433\u0440\u0430\u044f\u0441\u044c \u0441 \u044d\u0442\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u043e\u043d \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u043e\u0449\u043d\u0435\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437 JDK.<\/p>\n<h4>Stream.map<\/h4>\n<p>  \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f map \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a\u043e \u0432\u0441\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0438\u043c\u0430. \u0412\u043e\u0442 \u0442\u0430\u043a \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0447\u0435\u0440\u0435\u0437 headTail():  <\/p>\n<pre><code class=\"java\">public static &lt;T, R&gt; StreamEx&lt;R&gt; map(StreamEx&lt;T&gt; input, Function&lt;T, R&gt; mapper) {     return input.headTail((head, tail) -&gt; map(tail, mapper).prepend(mapper.apply(head))); }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 <a href=\"http:\/\/amaembo.github.io\/streamex\/javadoc\/one\/util\/streamex\/StreamEx.html#prepend-T...-\">prepend<\/a>, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0448\u043b\u043e. \u042d\u0442\u043e \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f \u043d\u0430 \u0442\u0435\u043c\u0443 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u0438\u043c\u043e\u0432 (\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c API \u0435\u0441\u0442\u044c Stream.concat). \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0430\u043c\u0438 \u0441\u0435\u0431\u044f \u0434\u043b\u044f \u0445\u0432\u043e\u0441\u0442\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0440\u0438\u043c\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443.<\/p>\n<p>  \u042d\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e, \u0430 \u0432\u0441\u0435 \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f \u0436\u0440\u0451\u0442 \u0441\u0442\u0435\u043a. \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0440\u043e\u0439 \u0441\u043f\u0430\u0441\u0430\u0435\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A5%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D0%B2%D0%B0%D1%8F_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F\">\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438<\/a>, \u043d\u043e \u0432 Java \u0435\u0451 \u043d\u0435\u0442 \u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0438\u0442\u0441\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f: \u043c\u044b \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 map \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u043f\u043e\u0437\u0436\u0435. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e <code>headTail()<\/code> \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0440\u0438\u043c\u0430, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u0439 \u0445\u0432\u043e\u0441\u0442. \u042f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0437\u0432\u0430\u043b \u044d\u0442\u0443 \u0444\u0438\u0447\u0443 \u00ab\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u0438\u043c\u043e\u0432\u00bb (tail stream optimization). \u041e\u043d\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0430 \u0441 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 <code>prepend<\/code> (\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0440\u0438\u043c\u0430), <code>mapFirst<\/code> (\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0440\u0438\u043c\u0430, \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435) \u0438 \u0441\u0430\u043c\u0438\u043c <code>headTail<\/code>. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0431\u044b \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 skip \u0438 dropWhile (\u0441 JDK-9), \u043d\u043e \u043c\u043e\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0431\u0435\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c Stream API, \u0430 \u0442\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0431\u044b \u0442\u043e\u043d\u043a\u0438\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u044f.<\/p>\n<p>  \u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u0430\u044f \u0432\u044b\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f map \u043d\u0435 \u043a\u0443\u0448\u0430\u0435\u0442 \u0441\u0442\u0435\u043a \u0438\u043b\u0438 \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u0438\u043c\u043e\u0432 \u043b\u044e\u0431\u043e\u0439 \u0434\u043b\u0438\u043d\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<h4>Stream.limit<\/h4>\n<p>  \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0441\u0442\u0440\u0438\u043c \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043e\u0439. \u0415\u0441\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0442\u0440\u0438\u043c \u0438\u0437 \u0433\u043e\u043b\u043e\u0432\u044b, \u0438\u043d\u0430\u0447\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u0431\u044f \u0434\u043b\u044f \u0445\u0432\u043e\u0441\u0442\u0430 \u0441 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u043d\u044b\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c (\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c n &lt;= 0 \u2014 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f):<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; limit(StreamEx&lt;T&gt; input, int n) {     return input.headTail((head, tail) -&gt; n &gt; 1 ? limit(tail, n - 1).prepend(head) : Stream.of(head)); }<\/code><\/pre>\n<p>  \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 (\u043a\u0430\u043a \u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 flatMap, \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 headTail \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c null \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0441\u0442\u0440\u0438\u043c\u0430):<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; limit(StreamEx&lt;T&gt; input, int n) {     return input.headTail((head, tail) -&gt; n &gt; 0 ? limit(tail, n - 1).prepend(head) : null); }<\/code><\/pre>\n<p>  \u041d\u043e \u0443 \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a: \u043e\u043d\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430\u0434\u043e (\u043f\u0440\u0438 n = 0 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 head \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f). \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c:<\/p>\n<pre><code class=\"java\">limit(StreamEx.of(new Random().ints(0, 1000).boxed().distinct()), 1000).forEach(System.out::println);<\/code><\/pre>\n<p>  \u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043e\u0442 0 \u0434\u043e 999, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435. 1000 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0435\u0441\u0442\u044c, \u0430 \u0432\u043e\u0442 1001 \u043d\u0435\u0442\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 1001-\u0435 \u0447\u0438\u0441\u043b\u043e, \u0442\u043e \u0432\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u043d\u0435\u0442.<\/p>\n<h4>Stream.skip<\/h4>\n<p>  \u0412\u044b\u043a\u0438\u043d\u0443\u0442\u044c n \u043f\u0435\u0440\u0432\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 n = 0, \u0432\u0435\u0440\u043d\u0451\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u0432\u043e\u0441\u0442 \u0441 \u043f\u0440\u0438\u043a\u043b\u0435\u0435\u043d\u043d\u043e\u0439 \u0433\u043e\u043b\u043e\u0432\u043e\u0439, \u0438\u043d\u0430\u0447\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0441\u0435\u0431\u044f \u0441 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u043d\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c:<\/p>\n<pre><code class=\"java\">static &lt;T&gt; StreamEx&lt;T&gt; skip(StreamEx&lt;T&gt; input, int n) {     return input.headTail((head, tail) -&gt; n &gt; 0 ? skip(tail, n - 1) : tail.prepend(head)); }<\/code><\/pre>\n<h4>Stream.flatMap<\/h4>\n<p>  \u041e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430 \u0441\u0442\u0440\u0438\u043c \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u043e\u0431\u0449\u0438\u0439 \u0441\u0442\u0440\u0438\u043c. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0430\u044f \u0436\u0435, \u043a\u0430\u043a \u0443 map:<\/p>\n<pre><code class=\"java\">public static &lt;T, R&gt; StreamEx&lt;R&gt; flatMap(StreamEx&lt;T&gt; input, Function&lt;T, Stream&lt;R&gt;&gt; mapper) {     return input.headTail((head, tail) -&gt; flatMap(tail, mapper).prepend(mapper.apply(head))); }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 <a href=\"http:\/\/amaembo.github.io\/streamex\/javadoc\/one\/util\/streamex\/StreamEx.html#prepend-java.util.stream.Stream-\">prepend<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u0440\u0438\u043c (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0432\u044b\u0439 prepend \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u044d\u0442\u043e\u0433\u043e).<\/p>\n<h4>Stream.peek<\/h4>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0440\u0438\u043c\u0430 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438 \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \u0433\u043e\u043b\u043e\u0432\u0443 \u043a \u0445\u0432\u043e\u0441\u0442\u0443:  <\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; peek(StreamEx&lt;T&gt; input, Consumer&lt;T&gt; consumer) {     return input.headTail((head, tail) -&gt; {         consumer.accept(head);         return peek(tail, consumer).prepend(head);     }); }<\/code><\/pre>\n<h4>Stream.filter<\/h4>\n<p>  \u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0443. \u041f\u0440\u0438\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \u0433\u043e\u043b\u043e\u0432\u0443, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f:  <\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; filter(StreamEx&lt;T&gt; input, Predicate&lt;T&gt; predicate) {     return input.&lt;T&gt; headTail((head, tail) -&gt; predicate.test(head)          ? filter(tail, predicate).prepend(head)          : filter(tail, predicate)); }<\/code><\/pre>\n<p>  <\/p>\n<h4>Stream.distinct<\/h4>\n<p>  \u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. \u0422\u0443\u0442 \u0443\u0436\u0435 \u044f\u0432\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c. \u041d\u0430\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c filter (\u043c\u043e\u0436\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u043b\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435):<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; distinct(StreamEx&lt;T&gt; input) {     return input.headTail((head, tail) -&gt; distinct(tail.filter(n -&gt; !Objects.equals(head, n))).prepend(head)); }<\/code><\/pre>\n<p>  \u041d\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0432\u0441\u0451 \u0436\u0435 \u0436\u0440\u0451\u0442 \u0441\u0442\u0435\u043a, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u0438\u043c\u043e\u0432 \u043d\u0435\u0442. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u043e, \u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 HashSet:<\/p>\n<pre><code class=\"java\">private static &lt;T&gt; StreamEx&lt;T&gt; distinct(StreamEx&lt;T&gt; input, Set&lt;T&gt; observed) {     return input.headTail((head, tail) -&gt; observed.add(head)              ? distinct(tail, observed).prepend(head)             : distinct(tail, observed)); }<\/code><\/pre>\n<p>  \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e <code>Set.add<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>false<\/code>, \u0435\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u0436\u0435 \u0431\u044b\u043b \u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0433\u043e\u043b\u043e\u0432\u0443 \u043d\u0435 \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c. \u0422\u0430\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0435\u043a \u0443\u0436\u0435 \u043d\u0435 \u043a\u0443\u0448\u0430\u0435\u0442 \u0438 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u0443\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439. \u0422\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 (\u0441 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0443\u0436\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430):<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; distinct(StreamEx&lt;T&gt; input) {     return distinct(input, new HashSet&lt;&gt;()); }<\/code><\/pre>\n<p>  <\/p>\n<h4>Stream.sorted<\/h4>\n<p>  \u041e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0438\u043c. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u0430\u044f: \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u0432\u044b\u0434\u0430\u0442\u044c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043f\u043e\u043a\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043d\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. \u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0441\u0451 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 <code>ArrayList<\/code>) \u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>headTail<\/code>:<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; sorted(StreamEx&lt;T&gt; input) {     return sorted(input, new ArrayList&lt;&gt;()); }  private static &lt;T&gt; StreamEx&lt;T&gt; sorted(StreamEx&lt;T&gt; input, List&lt;T&gt; buf) {     return input.headTail((head, tail) -&gt; {         buf.add(head);         return sorted(tail, buf);     }, () -&gt; {         buf.sort(null);         return buf.stream();     }); }<\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0432\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0440\u0438\u043c \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u043c\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0431\u0443\u0444\u0435\u0440 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0441 \u043d\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a. \u0417\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 <code>sorted<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438 \u043e\u043d \u0432\u0441\u0451 \u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 <code>shuffle<\/code>. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0435\u0441\u043b\u0438 \u0432\u044b \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0434\u0432\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0438\u043c\u0430, \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043a\u0430 \u0432\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u043f\u0435\u0440\u0432\u044b\u0439. \u041a\u0441\u0442\u0430\u0442\u0438, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 <code>buf.sort(null)<\/code> \u043d\u0430 <code>Collections.shuffle(buf)<\/code> \u0432\u044b \u0438 <code>shuffle<\/code> \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u0410 \u0441 <code>Collections.reverse(buf)<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0442\u0440\u0438\u043c.<\/p>\n<p>  JDK-9 \u043f\u043e\u043a\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0432\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0438 \u0438\u0445:<\/p>\n<h4>Stream.takeWhile<\/h4>\n<p>  \u041e\u0431\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u0432\u0435\u0440\u043d\u0451\u0442 false. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 limit:<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; takeWhile(StreamEx&lt;T&gt; input, Predicate&lt;T&gt; predicate) {     return input.headTail((head, tail) -&gt; predicate.test(head)          ? takeWhile(tail, predicate).prepend(head) : null); }<\/code><\/pre>\n<p>  <\/p>\n<h4>Stream.dropWhile<\/h4>\n<p>  \u0412\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0441\u0442\u0440\u0438\u043c\u0430, \u043f\u043e\u043a\u0430 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u043d\u0435 \u0432\u0435\u0440\u043d\u0451\u0442 <code>false<\/code>. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 <code>skip<\/code>:<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; dropWhile(StreamEx&lt;T&gt; input, Predicate&lt;T&gt; predicate) {     return input.headTail((head, tail) -&gt; predicate.test(head) ? dropWhile(tail, predicate) : tail.prepend(head)); }<\/code><\/pre>\n<p>  \u041d\u0443 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u0441\u043a\u0443\u0447\u043d\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 Stream API.<\/p>\n<h4>mirror<\/h4>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u0438\u043c\u0430 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 (\u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0440\u0438\u043c \u0438\u0437 1, 2, 3 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 1, 2, 3, 3, 2, 1). \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u0431\u0435\u0437 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; mirror(StreamEx&lt;T&gt; input) {     return input.headTail((head, tail) -&gt; mirror(tail).append(head).prepend(head)); }<\/code><\/pre>\n<p>  \u0421 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u0436\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0443\u0444\u0435\u0440:<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; mirror(StreamEx&lt;T&gt; input) {     return mirror(input, new ArrayDeque&lt;&gt;()); }  private static &lt;T&gt; StreamEx&lt;T&gt; mirror(StreamEx&lt;T&gt; input, Deque&lt;T&gt; buf) {     return input.headTail((head, tail) -&gt; {         buf.addFirst(head);         return mirror(tail, buf).prepend(head);     }, buf::stream); }<\/code><\/pre>\n<p>  \u041e\u0431\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u0431\u0435\u0440\u0443\u0442 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430\u0434\u043e: <code>mirror(StreamEx.of(1,2,3,4,5)).limit(3)<\/code> \u043d\u0435 \u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043e \u0442\u043e\u0447\u043a\u0438 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430.<\/p>\n<h4>scanLeft<\/h4>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u0438\u043c, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>scanLeft(StreamEx.of(1,2,3,4,5), Integer::sum)<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0440\u0438\u043c <code>1, 3, 6, 10, 15<\/code>.<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; scanLeft(StreamEx&lt;T&gt; input, BinaryOperator&lt;T&gt; operator) {     return input.headTail((head, tail) -&gt;          scanLeft(tail.mapFirst(cur -&gt; operator.apply(head, cur)), operator).prepend(head)); }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c <a href=\"http:\/\/amaembo.github.io\/streamex\/javadoc\/one\/util\/streamex\/StreamEx.html#mapFirst-java.util.function.Function-\">mapFirst<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 StreamEx. \u041d\u043e \u0435\u0441\u043b\u0438 \u0431 \u0438 \u043d\u0435 \u0431\u044b\u043b\u043e, \u043c\u044b \u0431 \u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; mapFirst(StreamEx&lt;T&gt; input, UnaryOperator&lt;T&gt; operator) {     return input.headTail((head, tail) -&gt; tail.prepend(operator.apply(head))); }<\/code><\/pre>\n<p>  \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0445\u0432\u043e\u0441\u0442\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u043a\u0430\u043a \u0441 \u043d\u0430\u0448\u0438\u043c mapFirst, \u0442\u0430\u043a \u0438 \u0441 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f.<\/p>\n<h4>takeWhileClosed<\/h4>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u0430\u0447\u043d\u043e\u0435. \u0418\u043d\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>takeWhile<\/code>, \u0447\u0442\u043e\u0431\u044b \u0432 \u043f\u043e\u0442\u043e\u043a \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0443, \u043d\u043e \u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0435\u0433\u043e \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0449\u0438\u0439. \u0427\u0435\u0440\u0435\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <code>takeWhile<\/code> \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c. \u0410 \u0447\u0435\u0440\u0435\u0437 <code>headTail<\/code> \u2014 \u043b\u0435\u0433\u043a\u043e:<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; takeWhileClosed(StreamEx&lt;T&gt; input, Predicate&lt;T&gt; predicate) {     return input.headTail((head, tail) -&gt; predicate.test(head)              ? takeWhileClosed(tail, predicate).prepend(head)             : Stream.of(head)); }<\/code><\/pre>\n<p>  <\/p>\n<h4>every<\/h4>\n<p>  \u0411\u0440\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0441\u0442\u0440\u0438\u043c\u0430 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u0441\u044f\u0442\u044b\u0439), \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e. \u0417\u0434\u0435\u0441\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 <code>skip<\/code>, \u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 <code>skip<\/code> \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0445\u0432\u043e\u0441\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043d\u0430\u0448\u0438\u043c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c <code>skip<\/code>:<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; every(StreamEx&lt;T&gt; input, int n) {     return input.headTail((head, tail) -&gt; every(skip(tail, n - 1), n).prepend(head)); }<\/code><\/pre>\n<p>  <\/p>\n<h4>couples<\/h4>\n<p>  \u0420\u0430\u0437\u0431\u0438\u0442\u044c \u0441\u0442\u0440\u0438\u043c \u043d\u0430 \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043f\u0430\u0440\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0432 \u043a \u043d\u0438\u043c \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e (\u0435\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c). \u0417\u0434\u0435\u0441\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c <code>headTail<\/code> \u0434\u0432\u0430\u0436\u0434\u044b:<\/p>\n<pre><code class=\"java\">public static &lt;T, R&gt; StreamEx&lt;R&gt; couples(StreamEx&lt;T&gt; input, BiFunction&lt;T, T, R&gt; mapper) {     return input.headTail((left, tail1) -&gt;              tail1.headTail((right, tail2) -&gt;                  couples(tail2, mapper).prepend(mapper.apply(left, right)))); }<\/code><\/pre>\n<p>  <\/p>\n<h4>pairMap<\/h4>\n<p>  \u0410 \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0438 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435? \u041b\u0435\u0433\u043a\u043e, \u043d\u0430\u0434\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u0430\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0441\u0442\u0440\u0438\u043c \u043f\u0440\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435:<\/p>\n<pre><code class=\"java\">public static &lt;T, R&gt; StreamEx&lt;R&gt; pairMap(StreamEx&lt;T&gt; input, BiFunction&lt;T, T, R&gt; mapper) {     return input.headTail((left, tail1) -&gt;          tail1.headTail((right, tail2) -&gt;              pairMap(tail2.prepend(right), mapper).prepend(mapper.apply(left, right)))); }<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 StreamEx, \u0438 \u044f \u043f\u0440\u043e \u043d\u0435\u0451 <a href=\"https:\/\/habrahabr.ru\/post\/256905\/\">\u043f\u0438\u0441\u0430\u043b<\/a>. \u041e\u043d\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 <code>headTail()<\/code>.<\/p>\n<h4>batches<\/h4>\n<p>  \u041b\u0430\u0434\u043d\u043e, \u0441 \u043f\u0430\u0440\u0430\u043c\u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0410 \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0441\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u0438\u043d\u044b (\u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u043e\u0432) \u0438 \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u043d\u0435\u0446\u0435\u043b\u044b\u0439 \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u0432 \u043a\u043e\u043d\u0446\u0435? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>batches(StreamEx(1,2,3,4,5,6,7), 3)<\/code> \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 <code>[1,2,3], [4,5,6], [7]<\/code>. \u0422\u0443\u0442 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440:<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;List&lt;T&gt;&gt; batches(StreamEx&lt;T&gt; input, int size) {     return batches(input, size, Collections.emptyList()); }  private static &lt;T&gt; StreamEx&lt;List&lt;T&gt;&gt; batches(StreamEx&lt;T&gt; input, int size, List&lt;T&gt; cur) {     return input.headTail((head, tail) -&gt; cur.size() &gt;= size              ? batches(tail, size, Collections.singletonList(head)).prepend(cur) \/\/ \u0441\u0442\u0430\u0440\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439             : batches(tail, size, StreamEx.of(cur).append(head).toList()), \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u0431\u0443\u0444\u0435\u0440\u0443             () -&gt; Stream.of(cur)); }<\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d \u043c\u044b \u043e\u0442\u0434\u0430\u0451\u043c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>() -&gt; Stream.of(cur)<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0445\u0432\u043e\u0441\u0442. \u0417\u0434\u0435\u0441\u044c \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0441\u043e\u0437\u0434\u0430\u044e \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0447\u0435\u0440\u0435\u0437 <code>StreamEx.of(cur).append(head).toList()<\/code>, \u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439. \u041d\u043e \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u0430\u0436\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h4>withIndices<\/h4>\n<p>  \u041f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0441\u0442\u0440\u0438\u043c\u0435? \u041c\u043e\u0436\u043d\u043e \u0438 \u044d\u0442\u043e. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0432\u0440\u043e\u0434\u0435 \u043f\u0430\u0440\u044b \u0438\u043d\u0434\u0435\u043a\u0441-\u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043f\u0440\u0438\u043c\u0435\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0442\u0438\u043f\u0430 <code>BiFunction&lt;Integer, T, R&gt;<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u0445\u043e\u0447\u0435\u0442:<\/p>\n<pre><code class=\"java\">public static &lt;T, R&gt; StreamEx&lt;R&gt; withIndices(StreamEx&lt;T&gt; input, BiFunction&lt;Integer, T, R&gt; mapper) {     return withIndices(input, 0, mapper); }  private static &lt;T, R&gt; StreamEx&lt;R&gt; withIndices(StreamEx&lt;T&gt; input, int idx, BiFunction&lt;Integer, T, R&gt; mapper) {     return input.headTail((head, tail) -&gt; withIndices(tail, idx + 1, mapper).prepend(mapper.apply(idx, head))); }<\/code><\/pre>\n<h4>dominators<\/h4>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e, \u043d\u0430\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u00ab\u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u00bb. \u0414\u043e\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u043e\u0442 \u0434\u0432\u0443\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>dominators(numbers, (a, b) -&gt; a &gt;= b)<\/code> \u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0434\u043d\u0430\u0431\u043e\u0440. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 every, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e skip \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0448 dropWhile:<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; dominators(StreamEx&lt;T&gt; input, BiPredicate&lt;T, T&gt; isDominator) {     return input.headTail((head, tail) -&gt; dominators(dropWhile(tail, e -&gt; isDominator.test(head, e)), isDominator)             .prepend(head)); }<\/code><\/pre>\n<h4>appendReduction<\/h4>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u0438\u043c\u0430 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0435\u0433\u043e \u0440\u0435\u0434\u0443\u043a\u0446\u0438\u0438 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>appendReduction(numbers, 0, Integer::sum)<\/code> \u0434\u043e\u043f\u0438\u0448\u0435\u0442 \u0432 \u0441\u0442\u0440\u0438\u043c \u0447\u0438\u0441\u0435\u043b \u0441\u0443\u043c\u043c\u0443 \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<pre><code class=\"java\">public static &lt;T&gt; StreamEx&lt;T&gt; appendReduction(StreamEx&lt;T&gt; input, T identity, BinaryOperator&lt;T&gt; op) {     return input.headTail((head, tail) -&gt;          appendReduction(tail, op.apply(identity, head), op).prepend(head),         () -&gt; Stream.of(identity)); }<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0432\u0441\u0451 \u043b\u0435\u043d\u0438\u0432\u043e \u0438 \u0445\u0432\u043e\u0441\u0442\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f.<\/p>\n<h4>primes<\/h4>\n<p>  \u0421\u043a\u043e\u0440\u0435\u0435 \u0443\u0447\u0435\u0431\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u0442\u043e \u042d\u0440\u0430\u0442\u043e\u0441\u0444\u0435\u043d\u0430: \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0442\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u043d\u0435\u0435:<\/p>\n<pre><code class=\"java\">public static StreamEx&lt;Integer&gt; sieve(StreamEx&lt;Integer&gt; input) {     return sieve(StreamEx.iterate(2, x -&gt; x+1)); }  private static StreamEx&lt;Integer&gt; sieve(StreamEx&lt;Integer&gt; input) {     return input.headTail((head, tail) -&gt; sieve(tail.filter(n -&gt; n % head != 0)).prepend(head)); }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u0442\u043e\u0436\u0435, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u041d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e. \u0421\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 JVM \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u0432\u044b\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0434\u043e 200 000 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u043f\u0430\u0434\u0451\u0442 \u0441\u043e StackOverflowError.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u0442\u0440\u0438\u043c\u0430 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437. \u0418\u043b\u0438 \u0441\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0438\u043c, \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0432 \u0435\u0433\u043e \u0434\u0432\u0443\u043c\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u043e, \u0447\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440). \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0435\u0433\u0443\u0449\u0435\u0435 \u043e\u043a\u043d\u043e (\u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 batches, \u043d\u043e \u0432\u043d\u0430\u0445\u043b\u0451\u0441\u0442). \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u0447\u0442\u043e \u0431\u044b \u044f \u043d\u0438 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b, \u043c\u043d\u0435 \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e headTail \u0432\u0435\u0441\u044c\u043c\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e (\u043c\u043e\u0438 \u0442\u0435\u0441\u0442\u044b <a href=\"https:\/\/github.com\/amaembo\/streamex\/blob\/760976f6291e9c69cee61f4363efcff8acecf188\/src\/test\/java\/one\/util\/streamex\/StreamExHeadTailTest.java#L57\">\u0437\u0434\u0435\u0441\u044c<\/a>). \u0412\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0434\u043b\u044f \u043c\u0435\u043d\u044f headTail \u0442\u043e\u0447\u043d\u043e \u043a\u043e\u0440\u043e\u0447\u0435 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c <code>Iterator<\/code> \u0438\u043b\u0438 <code>Spliterator<\/code>. \u041a\u0430\u043a \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0432 \u043c\u0438\u0440\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438 \u2014 \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0434\u0435\u043b\u043e. \u041f\u0440\u0438\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0438 \u043d\u0430 Java \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0439\u0442\u0435 \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c!               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/262139\/\"> https:\/\/habrahabr.ru\/post\/262139\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u042f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/github.com\/amaembo\/streamex\">StreamEx<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 Java 8 Stream API, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0442\u0443\u0434\u0430 \u043d\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0441\u0442\u0440\u0438\u043c\u043e\u0432. \u041e\u0431\u044b\u0447\u043d\u043e \u044f \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u0432\u0441\u0451 \u043f\u043e\u0434\u0440\u044f\u0434, \u0430 \u0432\u0441\u0435\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0438\u0447\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 (<a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/stream\/package-summary.html#StreamOps\">intermediate<\/a>) \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0442\u0430\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<ol>\n<li>\u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438?<\/li>\n<li>\u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u043b\u0435\u043d\u0438\u0432\u043e\u0439 \u0438 \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0435\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f?<\/li>\n<li>\u0421\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u043d\u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0442\u0440\u0438\u043c\u0435? \u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438?<\/li>\n<li>\u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c\u0441\u044f?<\/li>\n<\/ol>\n<p>  \u041c\u0438\u043d\u0443\u0441\u0438\u043a \u043f\u043e \u043b\u044e\u0431\u043e\u043c\u0443 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u0438 \u0442\u0430\u043a\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e. \u041c\u0438\u043d\u0443\u0441\u0438\u043a \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u2014 \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043e\u0432 \u0432 jOO\u03bb \u0435\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f <a href=\"http:\/\/www.jooq.org\/products\/jOO%CE%BB\/javadoc\/0.9.7\/org\/jooq\/lambda\/Seq.html#shuffle--\">shuffle()<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0430\u044f, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u044f\u043c\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u044f\u0435\u0442 \u0432\u0435\u0441\u044c \u0441\u0442\u0440\u0438\u043c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0440\u0438\u043c. \u042f \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u0443\u0432\u0430\u0436\u0430\u044e.<\/p>\n<p>  \u041c\u0438\u043d\u0443\u0441\u0438\u043a\u0438 \u043f\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0443\u043d\u043a\u0442\u0430\u043c \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0445 \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0442. \u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0443\u043d\u043a\u0442 \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442 <code>flatMap()<\/code>, \u0442\u0440\u0435\u0442\u0438\u0439 \u2014 <code>sorted()<\/code>, \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u2014 \u0432\u0441\u044f\u043a\u0438\u0435 <code>limit()<\/code> \u0438 <code>takeWhile()<\/code> (\u0432 JDK-9). \u041d\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u044f \u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u0434\u043d\u044f\u0445 \u044f \u043e\u0442\u043a\u0440\u044b\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043b\u043e\u0445\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u0441\u044f \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0442\u0440\u0438\u043c\u0435, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0445\u043e\u0440\u043e\u0448\u0430. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u0451 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u044e\u0431\u0443\u044e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u0442\u0430\u043a \u0438 \u043a\u0443\u0447\u0443 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445. \u042f \u043d\u0430\u0437\u0432\u0430\u043b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e <a href=\"http:\/\/amaembo.github.io\/streamex\/javadoc\/one\/util\/streamex\/StreamEx.html#headTail-java.util.function.BiFunction-java.util.function.Supplier-\">headTail()<\/a>.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-272592","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/272592","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=272592"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/272592\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=272592"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=272592"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=272592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}