{"id":3689,"date":"2017-02-23T22:25:48","date_gmt":"2017-02-23T20:25:48","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3689"},"modified":"2017-02-23T22:25:48","modified_gmt":"2017-02-23T20:25:48","slug":"stream-iterate-methoden","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2017\/02\/stream-iterate-methoden\/","title":{"rendered":"Stream iterate(\u2026)-Methoden"},"content":{"rendered":"<p>Die zwei statischen iterate(\u2026)-Methoden generieren einen Stream aus einem Startwert und einer Funktion, die das n\u00e4chste Element produziert.\u00a0 Bei iterate(T seed,<br \/>\nUnaryOperator&lt;T&gt; f) ist der Strom unendlich, bei der zweiten \u2013 in Java 9 hinzugekommenen Methode \u2013 iterate(\u2026, Predicate&lt;? super T&gt; hasNext, \u2026)-Methode beendet ein erf\u00fclltes Pr\u00e4dikat den Strom und erinnert an eine klassische for-Schleife. Der Abbruch \u00fcber ein Pr\u00e4dikat ist sehr flexibel, denn bei der ersten iterate(\u2026)-Methode ist das Stoppen immer ein Problem und so folgt oftmals ein limit(\u2026) oder takeWhile(\u2026) zum Limitieren der Elemente.<\/p>\n<p>Beispiele<\/p>\n<p>Produziere Permutationen eines Strings.<\/p>\n<pre>UnaryOperator&lt;String&gt; shuffleOp = s -&gt; {\n\n\u00a0 char[] chars = s.toCharArray();\n\n\u00a0 for ( int index = chars.length - 1; index &gt; 0; index-- ) {\n\n\u00a0\u00a0\u00a0 int rndIndex = ThreadLocalRandom.current().nextInt( index + 1 );\n\n\u00a0\u00a0\u00a0 if ( index == rndIndex ) continue;\n\n\u00a0\u00a0\u00a0 char c = chars[ rndIndex ];\n\n\u00a0\u00a0\u00a0 chars[ rndIndex ] = chars[ index ];\n\n\u00a0\u00a0\u00a0 chars[ index ] = c;\n\n\u00a0 }\n\n\u00a0 return new String( chars );\n\n};\n\nString text = \"Sie m\u00fcssen nur den Nippel durch die Lasche ziehn\";\n\nStream.<strong>iterate( text, shuffleOp )<\/strong>.limit( 10 ).forEach( System.out::println );<\/pre>\n<p>Erzeuge einen BigInteger-Stream ab 10 Millionen alle Zahlen aus, bis mit hoher Wahrscheinlichkeit eine Zufallszahlen erscheint.<\/p>\n<pre>Predicate&lt;BigInteger&gt; isNotPrime = i -&gt; ! i.isProbablePrime( 10 );\n\nUnaryOperator&lt;BigInteger&gt; incBigInt = i -&gt; i.add( BigInteger.ONE );\n\nStream.<strong>iterate( BigInteger.valueOf( 10_000_000 ), isNotPrime, incBigInt )<\/strong>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0 .forEach( System.out::println );<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Die zwei statischen iterate(\u2026)-Methoden generieren einen Stream aus einem Startwert und einer Funktion, die das n\u00e4chste Element produziert.\u00a0 Bei iterate(T seed, UnaryOperator&lt;T&gt; f) ist der Strom unendlich, bei der zweiten \u2013 in Java 9 hinzugekommenen Methode \u2013 iterate(\u2026, Predicate&lt;? super T&gt; hasNext, \u2026)-Methode beendet ein erf\u00fclltes Pr\u00e4dikat den Strom und erinnert an eine klassische for-Schleife. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1,11,66,85],"tags":[],"class_list":["post-3689","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-insel","category-java-8","category-java-9"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3689","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3689"}],"version-history":[{"count":4,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3689\/revisions"}],"predecessor-version":[{"id":3693,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3689\/revisions\/3693"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3689"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3689"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}