Lambda-Ausdrücke in Java [] (Lambda-Ausdrücke in Java), Lektion, Seite 722828
https://www.purl.org/stefan_ram/pub/lambda_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Methodenliterale in Java 

Listen

Eine Liste ist ein Objekt, welches eine Abfolge von Werten enthält. Man kann in ihr praktisch den Nachfolger von Reihungen sehen.

Das folgende Programm zeigt die Angabe einer Liste mit »java.util.Arrays.asList( "p", "q", "r" )« gefolgt von ihrer Ausgabe.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( java.util.Arrays.asList( "p", "q", "r" )); }}
transcript
[p, q, r]

Das folgende Programm zeigt die Ausgabe der Anzahl der Einträge einer Liste:

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( java.util.Arrays.asList( "p", "q", "r" ).size() ); }}
transcript
3

Die Klasse einer Liste ist »java.util.List«. Weitere Details zum Umgang mit Listen folgen erst später im Kurs. In dieser Lektion wird eine Liste vorerst nur in einigen Beispielen verwendet.

Methodenliterale

Eine Methode kann auch mit einem Pfeilsymbol »->« angegeben werden. Links von diesem steht der Parametername (hier »x«) und rechts der Methodenrumpf (Block).

Methode
public static void p( final java.lang.String x )
{ java.lang.System.out.println( x ); }
Entsprechendes Methodenliteral
x ->
{ java.lang.System.out.println( x ); }

Einbau von Methodenliteralen

Methoden dürfen als Argumente bestimmter Methoden verwendet werden. Wir behandeln hier noch nicht alle Regeln, sondern zeigen zunächst nur ein Beispiel.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.util.Arrays.asList( "A", "B", "C" ).forEach
( x ->{ java.lang.System.out.println( x ); } ); }}
transcript
A
B
C

Zugriff auf Variablen der Umgebung

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final int i = 2;
java.util.Arrays.asList( "" ).forEach
( x ->
{ final int j = 5;
java.lang.System.out.println( i );
java.lang.System.out.println( j ); } ); }}
transcript
2
5

Zugriff auf Variablen der Umgebung

Echte Variablen können nicht  erreicht werden.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int i = 2;
i = i + 1;
java.util.Arrays.asList( "" ).forEach
( x ->
{ java.lang.System.out.println( i ); } ); i = i + 1; }}
transcript
Main.java:9: error: local variables referenced from a lambda expression must be final or effectively final
{ java.lang.System.out.println( i ); }
^
1 error

Hinweis

Weitere Details zu Methodenmethoden und Methodenliteralen werden in späteren Lektionen behandelt werden.

Übungsfragen

?   Übungsfrage

Welche Methodenreferenz hat dasselbe Verhalten wie die Methode des folgenden Methodenliterals?

Methodenliteral
( java.lang.String s )->Integer.parseInt( s )

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722828 stefan_ram:722828 Lambda-Ausdrücke in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722828, slrprddef722828, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/lambda_java