{"id":3681,"date":"2017-02-23T11:21:58","date_gmt":"2017-02-23T09:21:58","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3681"},"modified":"2017-02-23T11:21:58","modified_gmt":"2017-02-23T09:21:58","slug":"praefix-operation-der-stream-api","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2017\/02\/praefix-operation-der-stream-api\/","title":{"rendered":"Pr\u00e4fix-Operation der Stream-API"},"content":{"rendered":"<p>Unter einem Pr\u00e4fix verstehen wir eine Teilfolge eines Streams, die beim ersten Element beginnt. Wir k\u00f6nnen mit limit(long) selbst einen Pr\u00e4fix generieren, doch im Allgemeinen geht es darum eine Bedingung zu haben, die alle Elemente eines Pr\u00e4fix-Streams erf\u00fcllen m\u00fcssen, und wenn es f\u00fcr ein Element nicht gilt, dann den Stream zu beenden. Java 9 deklariert f\u00fcr daf\u00fcr zwei neue Methoden takeWhile(\u2026) und dropWhile(\u2026):<\/p>\n<ul>\n<li>default Stream&lt;T&gt; takeWhile(Predicate&lt;? super T&gt; predicate)<\/li>\n<li>default Stream&lt;T&gt; dropWhile(Predicate&lt;? super T&gt; predicate)<\/li>\n<\/ul>\n<p>Die deutsche \u00dcbersetzung von takeWhile(\u2026) w\u00e4re \u201enimm solange predicate gilt\u201c und dropWhile(\u2026) \u201elass fallen, solange predicate gilt\u201c.<\/p>\n<p>Beispiel:\u00a0Der Stream soll bei Eintreffen des Wortes \u201eTrump\u201c sofort enden:<\/p>\n<pre>new Scanner( \"Dann twitterte Trump am 7. Nov. 2012: \"\n\n\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0+ \"'It's freezing and snowing in New York--we need global warming!'\" )\n\n\u00a0 .useDelimiter( \"\\\\P{Alpha}+\" ).tokens()\n\n\u00a0 .takeWhile( s -&gt; !s.equalsIgnoreCase( \"trump\" ) )\n\n\u00a0 .forEach( System.out::println );\u00a0 \/\/ Dann twitterte\n\n}<\/pre>\n<p>Der Stream soll nach dem l\u00e4ngsten Pr\u00e4fix beginnen, n\u00e4mlich dann, wenn eine Zahl negativ wurde:<\/p>\n<pre>Stream.of( 1, 2, -1, 3, 4, -1, 5, 6 )\n\n\u00a0\u00a0\u00a0\u00a0\u00a0 .<strong>dropWhile( i -&gt; i &gt; 0 )<\/strong>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0 .forEach( System.out::println );\u00a0\u00a0\u00a0 \/\/ -1 3 4 -1 5 6<\/pre>\n<p>Das Element, das das Pr\u00e4dikat erf\u00fcllt, ist selbst das erste Element im neuen Stream. Wir k\u00f6nnen es mit skip(1) \u00fcberspringen.<\/p>\n<p>Erf\u00fcllt schon bei takeWhile(\u2026) das erste Element nicht das Pr\u00e4dikat ist die der Ergebnis-Stream leer, erf\u00fcllt kein Element die Bedingung ist das Ergebnis wie der Ursprungs-Stream. takeWhile(\u2026) und dropWhile(\u2026) k\u00f6nnen zusammen verwendet werden: so liefert Stream.of( 1, 2, -1, 3, 4, -1, 5, 6 ).dropWhile( i -&gt; i &gt; 0 ).skip( 1 ).takeWhile( i -&gt; i &gt; 0 ).forEach( System.out::println ); die Ausgaben 3 4.<\/p>\n<p>Hinweis:\u00a0Pr\u00e4fixe sind nur f\u00fcr geordnete Streams sinnvoll. Und wenn Streams parallel sind m\u00fcssen sie f\u00fcr die Pr\u00e4fixberechnung wieder in Reihe gebracht werden, das ist eine eher teurer Operation.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unter einem Pr\u00e4fix verstehen wir eine Teilfolge eines Streams, die beim ersten Element beginnt. Wir k\u00f6nnen mit limit(long) selbst einen Pr\u00e4fix generieren, doch im Allgemeinen geht es darum eine Bedingung zu haben, die alle Elemente eines Pr\u00e4fix-Streams erf\u00fcllen m\u00fcssen, und wenn es f\u00fcr ein Element nicht gilt, dann den Stream zu beenden. Java 9 deklariert [&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,85],"tags":[],"class_list":["post-3681","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-insel","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\/3681","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=3681"}],"version-history":[{"count":6,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3681\/revisions"}],"predecessor-version":[{"id":3687,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3681\/revisions\/3687"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3681"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3681"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}