{"id":65,"date":"2023-12-06T23:10:24","date_gmt":"2023-12-06T22:10:24","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=65"},"modified":"2024-01-08T09:13:37","modified_gmt":"2024-01-08T08:13:37","slug":"lambdas-und-streams-in-java-8-ein-traumpaar","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=65","title":{"rendered":"Lambdas und Streams in Java 8 &#8211; ein Traumpaar!"},"content":{"rendered":"\n<p>Einleitung:<br>Java 8 hat die Java-Welt mit einer bahnbrechenden Neuerung bereichert \u2013 der Einf\u00fchrung von Lambda-Ausdr\u00fccken. Diese erweiterte Funktion erm\u00f6glicht es Entwicklern, Funktionen als Parameter an Methoden zu \u00fcbergeben, was die Codelesbarkeit und -schreibbarkeit erheblich verbessert und aus anderen, funktionaler orientierten Programmiersprachen als bew\u00e4hrtes Mittel bereits bekannt ist. Insbesondere in Verbindung mit der Streams-API bietet die Verwendung von Lambdas eine leistungsstarke M\u00f6glichkeit zur Manipulation von Daten. In diesem Artikel werden wir die Grundlagen von Lambdas in Java 8 erl\u00e4utern und uns dann auf ihre Anwendung im Zusammenhang mit der Streams-API konzentrieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lambdas in Java 8: Grundlagen<\/h2>\n\n\n\n<p>Lambdas sind anonyme Funktionen, die ohne explizite Deklaration einer Methode erstellt werden k\u00f6nnen. Ihr Hauptzweck besteht darin, eine kompaktere Syntax f\u00fcr die Implementierung von Funktionsinterfaces bereitzustellen. Ein Funktionsinterface ist ein Interface mit genau einer abstrakten Methode. Zum Beispiel ist das bekannte Interface <code>Runnable<\/code> ein Funktionsinterface, da es nur die Methode <code>run()<\/code> enth\u00e4lt.<\/p>\n\n\n\n<p>Ein Lambda-Ausdruck besteht aus Parametern, einem Pfeil (-&gt;) und einer Methode. Zum Beispiel sieht ein einfacher Lambda-Ausdruck f\u00fcr <code>Runnable<\/code> wie folgt aus:<\/p>\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\">Runnable myRunnable = () -&gt; System.out.println(<span class=\"hljs-string\">\"Hello, Lambda!\"<\/span>);<\/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<p>Hierbei wird die abstrakte Methode <code>run()<\/code> des <code>Runnable<\/code>-Interfaces durch den Lambda-Ausdruck implementiert. Der Compiler kann oft den Typ der Parameter ableiten, was die Syntax noch k\u00fcrzer macht.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vorteile von Lambdas<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Kompakte Syntax:<\/strong> Lambdas bieten eine k\u00fcrzere und \u00fcbersichtlichere Syntax im Vergleich zu anonymen Klassen.<\/li>\n\n\n\n<li><strong>Funktionale Programmierung:<\/strong> Lambdas erm\u00f6glichen eine programmierparadigmatische Verschiebung hin zur funktionalen Programmierung, indem Funktionen als B\u00fcrger erster Klasse behandelt werden.<\/li>\n\n\n\n<li><strong>Code Lesbarkeit:<\/strong> Durch die Verwendung von Lambdas kann der Code lesbarer und expressiver gestaltet werden, insbesondere wenn es um das Verarbeiten von Datenmengen geht.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Streams-API: Eine Einf\u00fchrung<\/h2>\n\n\n\n<p>Die Streams-API ist eine weitere bahnbrechende Erg\u00e4nzung in Java 8. Sie bietet eine deklarative M\u00f6glichkeit zur Verarbeitung von Datenmengen. Ein Stream ist eine Sequenz von Elementen, die nacheinander verarbeitet werden k\u00f6nnen. Der gro\u00dfe Vorteil besteht darin, dass Streams oft parallel verarbeitet werden k\u00f6nnen, was die Leistung verbessert.<\/p>\n\n\n\n<p>Die Streams-API besteht aus einer Pipeline von Operationen, die auf einem Datenstrom ausgef\u00fchrt werden. Diese Operationen k\u00f6nnen in zwei Kategorien unterteilt werden: Zwischenoperationen und Endoperationen. Zwischenoperationen transformieren einen Stream und geben einen neuen Stream zur\u00fcck, w\u00e4hrend Endoperationen einen finalen Wert oder Effekt erzeugen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lambdas und Streams: Eine unschlagbare Kombination<\/h2>\n\n\n\n<p>Die Verwendung von Lambdas in Verbindung mit der Streams-API erm\u00f6glicht eine elegante und effektive Datenmanipulation. Hier sind einige Beispiele, wie Lambdas in Streams eingesetzt werden k\u00f6nnen:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Filtern von Elementen<\/h3>\n\n\n\n<p>Angenommen, wir haben eine Liste von Benutzern und m\u00f6chten nur diejenigen ausw\u00e4hlen, die vollj\u00e4hrig sind. Mit Lambdas und Streams k\u00f6nnte der Code so aussehen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" 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\">User<\/span>&gt;<\/span> adults = userList.stream()\n                             .filter(user -&gt; user.getAge() &gt;= 18)\n                             .collect(Collectors.toList());<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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<p>In diesem Beispiel wird die <code>filter<\/code>-Operation verwendet, um nur die Elemente beizubehalten, die die angegebene Bedingung erf\u00fcllen. Der Lambda-Ausdruck <code>user -&gt; user.getAge() &gt;= 18<\/code> dient als Pr\u00e4dikat.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mapping von Elementen<\/h3>\n\n\n\n<p>Angenommen, wir haben eine Liste von B\u00fcchern und m\u00f6chten eine Liste der Autoren erstellen. Hier kommt die <code>map<\/code>-Operation ins Spiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">List<\/span>&lt;String&gt; authors = bookList.stream()\n                              .map(Book::getAuthor)\n                              .collect(Collectors.toList());<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Der Lambda-Ausdruck <code>Book::getAuthor<\/code> wird hier als Funktionsreferenz verwendet, um den Autor jedes Buches abzubilden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reduzierung von Elementen<\/h3>\n\n\n\n<p>Wenn wir beispielsweise den Gesamtpreis aller B\u00fccher berechnen m\u00f6chten, k\u00f6nnen wir die <code>reduce<\/code>-Operation verwenden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">double total = bookList.stream()\n                       .mapToDouble(Book::getPrice)\n                       .reduce(<span class=\"hljs-number\">0<\/span>, (subtotal, price) -&gt; subtotal + price);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird der Lambda-Ausdruck <code>(subtotal, price) -&gt; subtotal + price<\/code> verwendet, um die Summe der Buchpreise zu berechnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Lambdas in Java 8 und die Streams-API haben die Art und Weise, wie Java-Entwickler Daten verarbeiten, revolutioniert. Die Kombination dieser beiden Features erm\u00f6glicht einen eleganten und effizienten Code f\u00fcr die Manipulation von Datenmengen. Die kompakte Syntax der Lambdas verbessert die Lesbarkeit des Codes erheblich, w\u00e4hrend die Streams-API eine deklarative M\u00f6glichkeit bietet, Datenstr\u00f6me zu verarbeiten.<\/p>\n\n\n\n<p>Mit der Einf\u00fchrung von Lambda-Ausdr\u00fccken und der Streams-API hat Java seine funktionalen Programmierf\u00e4higkeiten erweitert und den Weg f\u00fcr eine modernere, leistungsstarke Java-Entwicklung geebnet. Entwickler k\u00f6nnen nun auf eine intuitive Weise komplexe Operationen auf Datenmengen durchf\u00fchren und gleichzeitig sauberen und wartbaren Code schreiben. Die Verwendung von Lambdas und Streams ist nicht nur eine Option, sondern eine Bereicherung f\u00fcr jeden Java-Entwickler, der seine F\u00e4higkeiten auf das n\u00e4chste Level heben m\u00f6chte.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einleitung:Java 8 hat die Java-Welt mit einer bahnbrechenden Neuerung bereichert \u2013 der Einf\u00fchrung von Lambda-Ausdr\u00fccken. Diese erweiterte Funktion erm\u00f6glicht es Entwicklern, Funktionen als Parameter an Methoden zu \u00fcbergeben, was die Codelesbarkeit und -schreibbarkeit erheblich verbessert und aus anderen, funktionaler orientierten Programmiersprachen als bew\u00e4hrtes Mittel bereits bekannt ist. Insbesondere in Verbindung mit der Streams-API bietet die [&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-65","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\/65","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=65"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/65\/revisions"}],"predecessor-version":[{"id":67,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/65\/revisions\/67"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=65"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=65"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}