Methoden Lambda Ausdrücke Methodensignatur

Flurry

Mitglied
Hallo,
Hallo, ich habe grade mit lambda Ausdrücken angefangen und verstehe noch verstehe noch nicht ganz wie die Methodensignaturen funktionieren.
() -> Math.random()
(x) -> x+=2
(String s, Integer k) -> { System.out.println(k+s); }

Wie sähen denn bei diesen die Methodensignaturen aus?
Für Math.random würde ich Math::random sagen.
Bei (x) -> x+=2 habe ich keinen Schimmer da ich nicht verstehe wie ohne angegebene Methode hier eine Methodensignatur zustande kommen kann.
Beim letzten verwirrt mir zum einen, dass es zwei verschiedene Datentypen sind, habe bisher nur Beispiele mit einem Datentyp gefunden, wie soll ohne angabe einer methode denn ein String+Integer rauskommen?

Wenn mir jemand einen Link zu einem guten Tutorial geben kann oder mir an sich bei der Aufgabe helfen kann wäre das echt nice.

Gruß Flurry
 

CSHW89

Bekanntes Mitglied
Ich glaube, du wirfst da einiges durcheinander. Was meinst du genau mit Methodensignatur? Normalerweise bedeutet das, welche Parameter bekommt die Methode und welchen Typ gibt die Methode zurück. Bei Lambda-Ausdrücken kann man das oft nur sagen, wenn das Ziel dieses Lambda-Ausdruck vorhanden ist. Hier allerdings gilt:
1. Methode ohne Parameter mit double als Rückgabe
3. Methode mit Parameter String und Integer und mit keiner Rückgabe (wegen Sys.out.println).

Beim 2. Beispiel fehlt wie gesagt das Ziel. Wenn man z.b. schreibt:
Java:
DoubleUnaryOperator f = (x) -> x+=2;
... ist die Signatur: Methode mit Parameter double und Rückgabe double, da die Methode applyAsDouble() im Interface DoubleUnaryOperator genau diese Signatur hat.

Math::random ist nur eine andere Möglichkeit das erste Beispiel zu schreiben. Für die anderen beiden Beispiele gibt es keine ähnlichen Äquivalente.

String+Integer hat nichts besonderes mit Lambda-Ausdrücken zu tun. In Java kannst du jedes Objekt mit einem String "addieren". Java ruft die toString Methode des Objekts auf und konkateniert dies mit dem anderen String.

lg Kevin
 

Flurry

Mitglied
Hallo Kevin, vielen dank für die schnelle Antwort.
Ja ich bin mir auch nicht sicher, ob das Wort Methodensignatur das richtige ist. Auf Englisch habe ich es unter Methode References gefunden und das ganze dann einfach übersetzt.
  • TypeName::staticMethod - reference to a static method of a class, an interface, or an enum
  • objectRef::instanceMethod - reference to an instance method
  • ClassName::instanceMethod - reference to an instance method from a class
  • TypeName.super::instanceMethod - reference to an instance method from the supertype of an object
  • ClassName::new - reference to the constructor of a class
  • ArrayTypeName::new - reference to the constructor of the specified array type
Das ganze soll ja zu einem Lambda ausdruck zb: x -> System.out.println(x) dann eine Method Reference machen System.out::println oder so habe ich das zumindest verstanden. Ich sage nicht, dass das bei den beispielen da oben funktioniert aber wenn es nicht funktioniert gibt es dafür ja irgendwelche gründe.
 

CSHW89

Bekanntes Mitglied
Da sagt man einfach im Deutschen auch Referenz einer Methode. Es ist aber eher anders rum, als du denkst (intern ist es zwar nicht ganz so, aber das würde jetzt zu weit führen):
"Math::random" ist einfach eine Kurzschreibweise und wird zu "() -> Math.random()" übersetzt. Ein anderes Beispiel:
Java:
class MyClass {
  public Double f(Integer z, String b) {
    return null;
  }
  public static Short g(Character c) {
    return null;
  }
}
class Main {
  public static void main(String[] args) {
    MyClass m = new MyClass();
  
    BiFunction<Integer,String,Double> f1 = m::f; // äquivalent zu...
    BiFunction<Integer,String,Double> f2 = (z, b) -> m.f(z,b); // ... ist äquivalent zu...
    BiFunction<Integer,String,Double> f3 = (Integer z, String b) -> m.f(z,b);
  
    Function<Character,Short> f4 = MyClass::g; // äquivalent zu...
    Function<Character,Short> f5 = (c) -> MyClass.g(c); // ... ist äquivalent zu...
    Function<Character,Short> f6 = (Character c) -> MyClass.g(c);
  }
}
Die Kurzschreibweise geht halt nur, wenn die Rückgabe des Lambda-Ausdrucks nur ein Funktionsaufruf ist, und die Parameter des Lambda-Ausdrucks unverändert an die Funktion weitergeleitet werden.
 

CSHW89

Bekanntes Mitglied
Ich verstehe nicht so ganz, was du genau machen willst. Nehmen wir das Beispiel "(x) -> x+=2;". Das ist so ein super Lambda-Ausdruck (abgesehen davon, dass += nichts bringt, da das Verändern der Variable x keinen Sinn macht. Sie ist danach ja nicht mehr vorhanden.).
Also nehmen wir mal "(x) -> x+2;". Warum willst du das zur "::"-Schreibwesie ändern? Das funktioniert zwar, allerdings musst du dafür erst mal eine Funktion definieren:
Java:
public class Huhu {
  public static int add2(int x) {
    return x+2;
  }
}
Jetzt kannst du "(x) -> x+2;" zu "Huhu::add2" ändern. Das führt aber das Lambda-Konzept absurdum, da man Lambdas ja genau dafür benutzt, um keine neuen Funktionen zu definieren.
Die Kurzschreibweise mit "::" benutzt man halt genau dann, wenn die oben stehenden Eigenschaften für den Lambda-Ausdruck erfüllt sind, nur dann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Java Lambda Ausdrücke Java Basics - Anfänger-Themen 19
A Lambda-Ausdrücke Java Basics - Anfänger-Themen 6
G Lambda Ausdrücke Java Basics - Anfänger-Themen 2
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
S Lambda Ausdrücke Streams Java Basics - Anfänger-Themen 6
M Lambda - Ausdrücke verstehen Java Basics - Anfänger-Themen 2
N Lambda Ausdrücke richtig schreiben Java Basics - Anfänger-Themen 4
C Lambda Ausdrücke Java Basics - Anfänger-Themen 1
TheSorm Java 8 Lambda-Ausdrücke Java Basics - Anfänger-Themen 9
C Interface Parameter und Rückgabewerte in Lambda Ausdrücken verwenden Java Basics - Anfänger-Themen 16
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
X Collections.sort als Lambda Java Basics - Anfänger-Themen 14
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
I Lambda map -> Children bekommen Java Basics - Anfänger-Themen 1
L Java reduce() + Lambda Java Basics - Anfänger-Themen 10
O Collections.sort und List.sort mit Lambda Verwirrung Java Basics - Anfänger-Themen 5
M Java 8 Lambda Expression Java Basics - Anfänger-Themen 1
A Lambda Java Basics - Anfänger-Themen 9
B Summe von Property innerhalb einer Liste via Lambda Java Basics - Anfänger-Themen 1
O Lambda Ausdruck mit Wildcard einschränken Java Basics - Anfänger-Themen 5
B Interface Java Lambda Ausdruck. Java Basics - Anfänger-Themen 11
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
M Lambda - Ausdruck zu Beschreibung erstellen Java Basics - Anfänger-Themen 7
K Lambda-Expression Java Basics - Anfänger-Themen 4
T Lambda-Funktion bei Binärbäumen Java Basics - Anfänger-Themen 13
K Lambda - kompliziertes filtern Java Basics - Anfänger-Themen 5
E Hilfe bei Lambda-Ausdrücken in BlueJ Java Basics - Anfänger-Themen 1
G Lambda Ausdruck: Welche Methode ist die Richtige? Java Basics - Anfänger-Themen 1
M Lambda Expressions Java Basics - Anfänger-Themen 3
S Prüfungsvorbereitung Januar ( Thema Ausdrücke ) Java Basics - Anfänger-Themen 14
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
W Reguläre Ausdrücke Java Basics - Anfänger-Themen 1
W Reguläre Ausdrücke Java Basics - Anfänger-Themen 1
C Boolsche Ausdrücke Java Basics - Anfänger-Themen 3
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
A Schleifen und Boolsche Ausdrücke Java Basics - Anfänger-Themen 42
K FYI: Reguläre Ausdrücke nutzen ja/nein Java Basics - Anfänger-Themen 2
B Erste Schritte Boolesche Ausdrücke & Gesetze Java Basics - Anfänger-Themen 3
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
D Variablen Ausdrücke Java Basics - Anfänger-Themen 6
P Reguläre Ausdrücke und Korrektheit Java Basics - Anfänger-Themen 2
0 Reguläre Ausdrücke bzw. Zahlenformat im String Java Basics - Anfänger-Themen 7
G Reguläre Ausdrücke Zeichenketten Java Basics - Anfänger-Themen 12
C Klassen Reguläre Ausdrücke auf Gleichheit prüfen Java Basics - Anfänger-Themen 5
J Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
C Reguläre-Ausdrücke Java Basics - Anfänger-Themen 5
P Ausdrücke berechnen Java Basics - Anfänger-Themen 2
J Java 8 Lamda ausdrücke Java Basics - Anfänger-Themen 9
J reguläre Ausdrücke Java Basics - Anfänger-Themen 1
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
H Erste Schritte Von jpg zu jpeg // reguläre Ausdrücke Java Basics - Anfänger-Themen 3
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 6
S Anweisungen Ausdrücke Java Basics - Anfänger-Themen 7
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
K Ausdrücke auswerten Java Basics - Anfänger-Themen 8
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
C Boolsche Ausdrücke - Wo ist mein Fehler? Java Basics - Anfänger-Themen 14
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
M Boolsche Ausdrücke minimieren Java Basics - Anfänger-Themen 13
S arithmetische Ausdrücke prüfen Java Basics - Anfänger-Themen 11
C Reguläre Ausdrücke: string.matches() und gefangene Gruppen Java Basics - Anfänger-Themen 12
S Reguläre Ausdrücke richtig einsetzten Java Basics - Anfänger-Themen 5
T Reguläre Ausdrücke Java Basics - Anfänger-Themen 18
0 Reguläre Ausdrücke und Funktionen Java Basics - Anfänger-Themen 2
S Datentypen Operatoren und Ausdrücke (formel richtig rechnen) Java Basics - Anfänger-Themen 8
D Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
S Reguläre Ausdrücke Java Basics - Anfänger-Themen 16
A Reguläre Ausdrücke Frage Java Basics - Anfänger-Themen 3
E Reguläre Ausdrücke mit sehr variablen Eigenschaften Java Basics - Anfänger-Themen 2
T Ausdrucksparser für Mathematische Ausdrücke Java Basics - Anfänger-Themen 15
N Ausdrücke Java Basics - Anfänger-Themen 6
N Reguläre Ausdrücke - bekomme Suchkriterium nicht hin Java Basics - Anfänger-Themen 3
J Reguläre Ausdrücke in Java Java Basics - Anfänger-Themen 2
J Reguläre Ausdrücke Java Basics - Anfänger-Themen 6
W Suche nach strings zwischen eckigen Klammern mittels regulärer Ausdrücke Java Basics - Anfänger-Themen 3
S Strings und reguläre Ausdrücke Java Basics - Anfänger-Themen 2
N Reguläre Ausdrücke Java Basics - Anfänger-Themen 4
S Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
M Reguläre ausdrücke? Java Basics - Anfänger-Themen 8
D Reguläre Ausdrücke: Anzahl Wiederholungen als Variable? Java Basics - Anfänger-Themen 3
A Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
C arithmetische Ausdrücke Java Basics - Anfänger-Themen 7
M Reguläre Ausdrücke - maskieren von Zeichen? Java Basics - Anfänger-Themen 9
M regüläre Ausdrücke, die String - Variablen und Expression Java Basics - Anfänger-Themen 5
M Reguläre Ausdrücke und Ausgabe Java Basics - Anfänger-Themen 10
K Reguläre Ausdrücke - Gefundene Tokens direkt ermitteln Java Basics - Anfänger-Themen 3
J Reguläre Ausdrücke: Zeichenfolge ausschließen Java Basics - Anfänger-Themen 2
G Reguläre Ausdrücke Java Basics - Anfänger-Themen 13
L java und reguläre ausdrücke Java Basics - Anfänger-Themen 4
G Reguläre Ausdrücke zum Filtern von logfiles Java Basics - Anfänger-Themen 2
T Reguläre Ausdrücke? Java Basics - Anfänger-Themen 3
E Reguläre Ausdrücke Java Basics - Anfänger-Themen 17
O reguläre Ausdrücke bei java.util.regex.Pattern Java Basics - Anfänger-Themen 4
A Reguläre Ausdrücke der Pfade unter Windows und Unix Java Basics - Anfänger-Themen 3
M Ausdrücke -> Werte Java Basics - Anfänger-Themen 6
N Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
G Problem reguläre Ausdrücke Java Basics - Anfänger-Themen 4
A Reguläre Ausdrücke: Inhalt zwischen zwei Schlüsselwörtern Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben