{"id":4485,"date":"2023-07-07T16:00:21","date_gmt":"2023-07-07T16:00:21","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=4485"},"modified":"2025-10-04T09:19:44","modified_gmt":"2025-10-04T09:19:44","slug":"java-lambda","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-lambda\/","title":{"rendered":"Java Lambda-Ausdr\u00fccke: Was sind sie und wie verwendet man sie?"},"content":{"rendered":"<p>Viele <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/java-entwickler-senior\/\">Java-Entwickler<\/a> sind bereits mit Lambda-Ausdr\u00fccken konfrontiert worden. Diese Funktion wurde bereits in der Version 2014 von Java 8 hinzugef\u00fcgt, ist also nicht neu. Sie wird h\u00e4ufig von Programmierern verwendet und bietet viele Vorteile. Wenn dir jedoch Lambda-Ausdr\u00fccke Schwierigkeiten bereiten oder du nicht wei\u00dft, was sie darstellen, bist du hier genau richtig.  <\/p>\n<h2>Was ist ein Lambda-Ausdruck (expression)?<\/h2>\n<p>Ein Lambda-Ausdruck stellt eine Funktionalit\u00e4t dar, die in Java 8 hinzugef\u00fcgt wurde. Es handelt sich um einen kurzen Codeblock, \u00e4hnlich einer Methode, der jedoch im Gegensatz zu einer Methode keinen Methodennamen ben\u00f6tigt und direkt im Methodenk\u00f6rper implementiert werden kann. <\/p>\n<p>Lambda hat mehrere Vorteile, wie z.B.:<\/p>\n<ul>\n<li><strong> er vereinfacht den Code und bietet eine bessere Lesbarkeit<\/strong> \u2013 anstelle von mehrzeiligem Code m\u00fcssen nur wenige Zeilen geschrieben werden,<\/li>\n<li><strong>erm\u00f6glicht die Verwendung der funktionalen Programmierung<\/strong> &#8211; das bedeutet, dass eine Funktion als Eingabeparameter einer anderen Funktion verwendet werden kann,<\/li>\n<li><strong>verbessert die Code-Parallelisierung <\/strong>&#8211; mit anderen Worten, eine effizientere Code-Ausf\u00fchrung auf Multi-Core-Prozessen.<\/li>\n<\/ul>\n<h2>Syntax des Lambda-Ausdrucks<\/h2>\n<p>Jeder Lambda-Ausdruck muss <strong>die richtige Syntax<\/strong> haben. Nur in diesem Fall wird es die gew\u00fcnschte Wirkung haben. Lambda muss enthalten:<\/p>\n<ul>\n<li>Liste der Argumente,<\/li>\n<li>das Pfeilzeichen,<\/li>\n<li>den K\u00f6rper des Ausdrucks.<\/li>\n<\/ul>\n<p>In der Praxis kann das folgenderma\u00dfen aussehen:<\/p>\n<p><strong>&gt; (Argumentliste) &#8211; Ausdrucksk\u00f6rper<\/strong><\/p>\n<p><strong>&gt; (Argumentliste) &#8211; { Ausdruck1; Ausdruck2, &#8230;}<\/strong><\/p>\n<p><strong> <\/strong>Die Argumentliste kann auch <strong>leer<\/strong> sein, zum Beispiel:<\/p>\n<p><strong>&gt; () &#8211; { System.out.println(&#8222;Hallo&#8220;); }<\/strong><\/p>\n<p><strong> <\/strong>Der K\u00f6rper des Ausdrucks muss nur dann geschweifte Klammern enthalten, wenn er <strong>mehr als eine Zeile Code<\/strong> enth\u00e4lt. Im obigen Beispiel k\u00f6nnen wir ihn weglassen:<\/p>\n<p><strong>&gt; () &#8211; System.out.println(&#8222;Hallo&#8220;);<\/strong><\/p>\n<p><strong> <\/strong>Die Argumenttypen k\u00f6nnen, aber m\u00fcssen nicht definiert sein, was bedeutet, dass die beiden Ausdr\u00fccke <strong>gleichwertig<\/strong> sind:<\/p>\n<p><strong>&gt; (x) &#8211; System.out.println(x);<\/strong><\/p>\n<p><strong>&gt; (Int x) &#8211; System.out.println(x);<\/strong><\/p>\n<p><strong> <\/strong>Lambda kann auch <strong>Werte zur\u00fcckgeben<\/strong>, ohne das Wort <em>return <\/em> zu verwenden. Der Compiler kann sie selbst ableiten:<\/p>\n<p><strong>&gt; (x, y) &#8211; x + y<\/strong><\/p>\n<div class=\"inside\"><\/div>\n<h2>Beispiele f\u00fcr die Verwendung von lambda<\/h2>\n<p>F\u00fcr eine bessere Vorstellung geben wir <strong>drei Beispiele<\/strong>, wie ein Lambda-Ausdruck verwendet werden kann.<\/p>\n<h3>Beispiel Nr. 1: Lambda-Ausdruck in forEach<\/h3>\n<p>Lambda-Ausdr\u00fccke werden oft als<strong> Funktionsparameter<\/strong> verwendet.<\/p>\n<pre><code class=\"language-java\" data-line=\"\">package com.test;\n\nimport java.util.ArrayList;\n\npublic class LambdaExample1 {\n\n\tpublic static void main(String[] args) {\n\t\tArrayList&lt;Integer&gt; numbers = new ArrayList&lt;Integer&gt;();\n\t\tnumbers.add(1);\n\t\tnumbers.add(2);\n\t\tnumbers.add(3);\n\t\t\/\/ Vytlaci na konzolu 1 2 3 pod sebou. \n\t\tnumbers.forEach(x -&gt; System.out.println(x));\n\t}\n}<\/code><\/pre>\n<p>Der Lambda-Ausdruck kann in einer <strong>Variablen<\/strong> gespeichert werden. Es gilt jedoch nur, wenn die Variable ein Interface mit einer einzigen Methode ist. In solchen F\u00e4llen muss der Lambda-Ausdruck die gleiche Anzahl von Parametern und den gleichen R\u00fcckgabetyp haben wie die Methode.<\/p>\n<p>Java hat <strong>viele Benutzeroberfl\u00e4chen<\/strong>. Ein Beispiel ist das Interface Consumer, das Listen verwendet:<\/p>\n<pre><code class=\"language-java\" data-line=\"\">java.util.function.Consumer&lt;Integer&gt; function = x -&gt; System.out.println(x);\nnumbers.forEach(function);<\/code><\/pre>\n<h3>Beispiel Nr. 2: Definieren einer funktionalen Schnittstelle f\u00fcr einen Lambda-Ausdruck<\/h3>\n<p>Das zweite Beispiel zeigt die Erstellung einer funktionalen Schnittstelle f\u00fcr <strong>grundlegende mathematische Operationen<\/strong>. Man kann darin Ausdr\u00fccke f\u00fcr Addition, Subtraktion, Multiplikation, Division und die Methode <em>operate <\/em> einf\u00fcgen. Seine Aufgabe ist es, zwei Zahlen zu nehmen und der zugeh\u00f6rige Lambda-Ausdruck berechnet ein Ergebnis, das wie folgt aussieht:<\/p>\n<pre><code class=\"language-java\" data-line=\"\">4 + 2 = 6 \n4 - 2 = 2\n4 * 2 = 8\n4 \/ 2 = 2<\/code><\/pre>\n<p>Dank der Methode operate berechnet der zugeh\u00f6rige Lambda-Ausdruck schnell und einfach das Ergebnis.<\/p>\n<p>Man kann Lambda-Ausdr\u00fccke in ein funktionales Interface f\u00fcr grundlegende mathematische Operationen einf\u00fcgen.<\/p>\n<pre><code class=\"language-java\" data-line=\"\">package com.test;\n\nimport java.lang. ArithmeticException;\n\npublic class LambdaExample2 {\n    \/\/ Deklarovanie interfejsu pre lamda vyraz\n    interface MathOperation {\n        int operation(int x, int y);\n    }\n    \/\/ Deklarovanie metody pre matematicku operaciu\n    private int operate (int x, int y, MathOperation mathOperation) {\n        return mathOperation.operation (x, y);\n    }\n    \/\/ Vypis celej operacie do konzoly.\n    public static void printResult(int x, char c, int y, int z) {\n        System.out.printf(&quot;%d %s %d = %d\\n&quot;, x, c, y, z);\n    }\n    public static void main(String[] args) {\n        \/\/ Bez deklaracie typu\n        MathOperation addition = (x, y) -&gt; x + y;\n        \/\/ S deklaraciou typu (int)\n        MathOperation substraction = (int x, int y) -&gt; x - y;\n        \/\/ S klucovym slovom return (musi byt v krutenych zatvorkach)\n        MathOperation multiplication = (x, y) -&gt; { return (x * y); };\n        \/\/ Viacriadkovy lambda vyraz\n        MathOperation division = (x, y) -&gt; {\n            if(y != 0)\n                return (x \/ y);\n            else\n                throw new ArithmeticException(&quot;You shouldn&#039;t divide a number by zero!&quot;);\n        };\n\n        LambdaExample2 test = new LambdaExample2();\n        int a = 4; int b = 2;\n        \/\/ Scitanie dvoch cisiel\n        printResult(a, &#039;+&#039;, b, test.operate (a, b, addition));\n        \/\/ Odcitanie dvoch cisiel\n        printResult(a, &#039;-&#039;, b, test.operate (a, b, substraction));\n        \/\/ Vynasobenie dvoch cisiel\n        printResult(a, &#039;*&#039;, b, test.operate (a, b, multiplication));\n        \/\/ Vydelenie dvoch cisiel\n        printResult(a, &#039;\/&#039;, b, test.operate (a, b, division));\n    }\n}<\/code><\/pre>\n<h3>Beispiel Nr. 3: Sortieren, Filtern und Iterieren von Sammlungen \u00fcber Lambda-Ausdr\u00fccke<\/h3>\n<p>Ein Vorteil von Lambda-Ausdr\u00fccken ist, dass sie die Notwendigkeit verringern, eigene Hilfsmethoden zu schreiben. Gleichzeitig <strong>verk\u00fcrzen und verdeutlichen sie den Code<\/strong>, was die ganze Arbeit erleichtert. Die Leistungsf\u00e4higkeit von Lambdas zeigt sich vor allem in Kombination mit anderen Java-Funktionen, wie z.B. Sammlungen.<\/p>\n<p>Im folgenden Beispiel wird gezeigt, wie man Objekte in einer Sammlung mit Hilfe von Lambda-Ausdr\u00fccken einfach <strong>sortieren, filtern und iterieren<\/strong> kann:<\/p>\n<pre><code class=\"language-java\" data-line=\"\">package com.test;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.stream.Stream;\n\nclass Product {\n    String name;\n    double price;\n\n    public Product(String name, double price) {\n        this.name = name;\n        this.price = price;\n    }\n}\n\npublic class LambdaExample3 {\n\n    public static Product createProduct(String name, double price) {\n        return new Product(name, price);\n    }\n\n    public static void main(String[] args) {\n        List&lt;Product&gt; products = new ArrayList();\n        products.add(createProduct(&quot;Chlieb&quot;, 1.0));\n        products.add(createProduct(&quot;Mlieko&quot;, 0.5));\n        products.add(createProduct(&quot;Keksy&quot;, 0.8));\n        products.add(createProduct(&quot;Smotana&quot;, 0.4));\n        products.add(createProduct (&quot;Cokolada&quot;, 0.7));\n\n        \/\/ Sortovanie nazvov produktov podla abecedy cez lambdu\n        products.sort((p1, p2) -&gt; p1.name.compareTo(p2.name));\n\n        \/\/ Vyfiltrovanie produktov s cenou (0.5. 1.0)\n        Stream&lt;Product&gt; filteredProducts = products.stream().filter(p -&gt; p.price &gt; 0.5 &amp;&amp; p.price &lt; 1.0);\n\n        \/\/ Iterovanie v kolekcii\n        filteredProducts.forEach(product -&gt; System.out.println(product.name + &quot;: &quot; + product.price));\n    }\n}<\/code><\/pre>\n<p>Das Ergebnis, das du erh\u00e4ltst, sieht folgenderma\u00dfen aus:<\/p>\n<pre><code class=\"language-java\" data-line=\"\">Cokolada: 0.7\nKeksy: 0.8<\/code><\/pre>\n<h2>Lambda-Ausdr\u00fccke machen die Arbeit einfacher und schneller<\/h2>\n<p>Lambda-Ausdr\u00fccke sind eine gro\u00dfartige Funktionalit\u00e4t in der Programmiersprache Java. Die Arbeit kann durch ihre Verwendung <strong>erleichtert und beschleunigt werden.<\/strong> Dar\u00fcber hinaus verdeutlichen sie den Code und er\u00f6ffnen neue M\u00f6glichkeiten. Lambda ist seit Java <a href=\"https:\/\/msgprogramator.sk\/de\/java-jdk\/\">8<\/a> ein Teil von Java. Wenn du also eine \u00e4ltere Version verwendest, lohnt es sich, \u00fcber ein Update nachzudenken.<\/p>\n<p>Wir haben Dateien mit den oben genannten Java Lambda-Beispielen vorbereitet, die du direkt in Java ausf\u00fchren kannst. <a href=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/08\/Lambda.zip\">Lade den Code hier herunter.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Machen dir Lambda-Ausdr\u00fccke Probleme oder wei\u00dft du nicht, was sie bedeuten? Hier bist du richtig.<\/p>\n","protected":false},"author":14,"featured_media":4486,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-4485","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4485","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/comments?post=4485"}],"version-history":[{"count":3,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4485\/revisions"}],"predecessor-version":[{"id":9203,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4485\/revisions\/9203"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/4486"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=4485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=4485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=4485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}