{"id":53,"date":"2023-11-07T15:12:20","date_gmt":"2023-11-07T14:12:20","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=53"},"modified":"2024-01-08T09:14:39","modified_gmt":"2024-01-08T08:14:39","slug":"die-stream-api-in-java","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=53","title":{"rendered":"Die Stream-API in Java"},"content":{"rendered":"\n<p>Die Stream-API in Java, eingef\u00fchrt mit Java 8, hat die Art und Weise, wie Daten in der Programmierung verarbeitet werden, ma\u00dfgeblich ver\u00e4ndert. Diese API erm\u00f6glicht eine deklarative und funktionale Herangehensweise an die Manipulation von Datenstrukturen wie Listen und Arrays. In diesem Artikel werden wir die Grundlagen der Stream-API beleuchten, verschiedene Operationen erkunden und praktische Anwendungen betrachten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einf\u00fchrung in die Stream-API<\/h2>\n\n\n\n<p>Die Stream-API erm\u00f6glicht die Verarbeitung von Elementsequenzen auf eine deklarative Weise. Sie besteht aus Zwischenoperationen, die den Stream transformieren, und Endoperationen, die den Stream schlie\u00dfen und ein Endergebnis liefern. Diese Abstraktion erleichtert die effiziente und leserliche Verarbeitung von Daten in Java.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erstellung von Streams<\/h2>\n\n\n\n<p>Streams k\u00f6nnen auf verschiedene Weisen erstellt werden, darunter aus Collections, Arrays oder mithilfe von Generatoren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Aus einer Collection<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">List&lt;<span class=\"hljs-built_in\">String<\/span>&gt; stringList = Arrays.asList(<span class=\"hljs-string\">\"Java\"<\/span>, <span class=\"hljs-string\">\"Stream\"<\/span>, <span class=\"hljs-string\">\"API\"<\/span>);\nStream&lt;<span class=\"hljs-built_in\">String<\/span>&gt; stringStream = stringList.stream();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">2. Aus einem Array<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-built_in\">String<\/span>&#91;] stringArray = {<span class=\"hljs-string\">\"Java\"<\/span>, <span class=\"hljs-string\">\"Stream\"<\/span>, <span class=\"hljs-string\">\"API\"<\/span>};\nStream&lt;<span class=\"hljs-built_in\">String<\/span>&gt; stringStream = Arrays.stream(stringArray);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">3. Mithilfe von <code>Stream.of()<\/code><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Stream&lt;<span class=\"hljs-built_in\">String<\/span>&gt; stringStream = Stream.of(<span class=\"hljs-string\">\"Java\"<\/span>, <span class=\"hljs-string\">\"Stream\"<\/span>, <span class=\"hljs-string\">\"API\"<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">4. Generierung oder Iteration mit <code>Stream.generate()<\/code> oder <code>Stream.iterate()<\/code><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">Stream<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Integer<\/span>&gt;<\/span> infiniteStream = Stream.generate(() -&gt; 1);\nStream<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Integer<\/span>&gt;<\/span> sequentialStream = Stream.iterate(0, n -&gt; n + 2).limit(10);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Zwischenoperationen auf Streams<\/h2>\n\n\n\n<p>Zwischenoperationen sind Transformationen, die auf einem Stream ausgef\u00fchrt werden. Hier sind einige grundlegende Operationen:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <code>filter()<\/code><\/h3>\n\n\n\n<p>Filtert Elemente basierend auf einem Pr\u00e4dikat.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">List<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">String<\/span>&gt;<\/span> filteredList = stringList.stream()\n                                      .filter(s -&gt; s.length() &gt; 3)\n                                      .collect(Collectors.toList());<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">2. <code>map()<\/code><\/h3>\n\n\n\n<p>Wendet eine Funktion auf jedes Element des Streams an.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">List&lt;<span class=\"hljs-built_in\">String<\/span>&gt; uppercasedList = stringList.stream()\n                                        .map(<span class=\"hljs-built_in\">String<\/span>::toUpperCase)\n                                        .collect(Collectors.toList());<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">3. <code>flatMap()<\/code><\/h3>\n\n\n\n<p>Wird verwendet, wenn jedes Element des Streams in mehrere Elemente gemappt werden soll.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">List&lt;<span class=\"hljs-built_in\">String<\/span>&gt; flatMapList = stringList.stream()\n                                    .flatMap(s -&gt; Arrays.stream(s.split(<span class=\"hljs-string\">\"\"<\/span>)))\n                                    .collect(Collectors.toList());<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Endoperationen auf Streams<\/h2>\n\n\n\n<p>Endoperationen schlie\u00dfen einen Stream und liefern ein Endergebnis. Hier sind einige Endoperationen:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <code>forEach()<\/code><\/h3>\n\n\n\n<p>F\u00fchrt eine Aktion f\u00fcr jedes Element des Streams aus.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">stringList<\/span><span class=\"hljs-selector-class\">.stream<\/span>()<span class=\"hljs-selector-class\">.forEach<\/span>(<span class=\"hljs-selector-tag\">System<\/span><span class=\"hljs-selector-class\">.out<\/span><span class=\"hljs-selector-pseudo\">::println)<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">2. <code>collect()<\/code><\/h3>\n\n\n\n<p>Sammelt die Elemente des Streams in eine Collection oder andere Datenstruktur.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">List&lt;<span class=\"hljs-built_in\">String<\/span>&gt; collectedList = stringList.stream()\n                                      .filter(s -&gt; s.startsWith(<span class=\"hljs-string\">\"J\"<\/span>))\n                                      .collect(Collectors.toList());<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">3. <code>reduce()<\/code><\/h3>\n\n\n\n<p>Reduziert die Elemente des Streams zu einem einzigen Wert.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">Optional<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">String<\/span>&gt;<\/span> concatenatedString = stringList.stream()\n                                                .reduce((s1, s2) -&gt; s1 + s2);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">4. <code>count()<\/code><\/h3>\n\n\n\n<p>Z\u00e4hlt die Anzahl der Elemente im Stream.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">long count = stringList.stream().count();<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Parallele Verarbeitung mit Streams<\/h2>\n\n\n\n<p>Die Stream-API unterst\u00fctzt auch parallele Verarbeitung, was die Leistungsf\u00e4higkeit weiter steigert.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">List<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">String<\/span>&gt;<\/span> parallelList = stringList.parallelStream()\n                                     .filter(s -&gt; s.length() &gt; 3)\n                                     .collect(Collectors.toList());<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Warnung: Verwendung von <code>forEach()<\/code><\/h2>\n\n\n\n<p>Es sei darauf hingewiesen, dass die Verwendung von <code>forEach()<\/code> statt einer traditionellen <code>for<\/code>-Schleife nicht immer die beste Wahl ist. Der resultierende Code wird h\u00e4ufig weniger \u00fcbersichtlich, und das Debugging im Kontext von Streams kann komplizierter sein, insbesondere der Einsatz von Single-Stepping wird durch die zus\u00e4tzlichen Ebenen im Stack-Trace, welche die Streams zwingend mit sich bringen, nicht gerade angenehmer. Daher ist es ratsam, diese Operation mit Bedacht einzusetzen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Die Stream-API in Java bietet eine effiziente und elegante M\u00f6glichkeit zur Verarbeitung von Daten. Durch das Verst\u00e4ndnis der verschiedenen Operationen und deren Anwendung k\u00f6nnen Entwickler leserlichen Code schreiben, der sowohl effizient als auch flexibel ist. Die Stream-API tr\u00e4gt erheblich dazu bei, die Qualit\u00e4t und Lesbarkeit des Codes in Java zu verbessern.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Stream-API in Java, eingef\u00fchrt mit Java 8, hat die Art und Weise, wie Daten in der Programmierung verarbeitet werden, ma\u00dfgeblich ver\u00e4ndert. Diese API erm\u00f6glicht eine deklarative und funktionale Herangehensweise an die Manipulation von Datenstrukturen wie Listen und Arrays. In diesem Artikel werden wir die Grundlagen der Stream-API beleuchten, verschiedene Operationen erkunden und praktische Anwendungen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-53","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/53","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=53"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/53\/revisions"}],"predecessor-version":[{"id":54,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/53\/revisions\/54"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=53"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=53"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=53"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}