Lambda

Diskutiere Lambda im Java Basics - Anfänger-Themen Bereich.
A

Adriano10

Java:
public class üben {
    
    public static void main(String[] args){
        //Iterativ
        Potenz potenz = (int x, int y) -> {int result = 1;  for(int i = 0; i < y; i++) {result *= x;}
        return result;};     
                
        int result = potenz.potenz(5, 2);
        
        System.out.println(result);
        
        
        //Recursiv
        
        Potenz p = (int x, int y) -> {if(y == 0) return 1; else return x * p.potenz(x, y -1);}
    }
    
    interface Potenz{
        int potenz(int x, int y);
    }
}
Bei dem recursive Lambda meckert Compiler, was mache ich hier falsch.

Wie kann ich bei diesem Fall Recurion in Lambda verwenden, um ohne Fehler ausgeben zu lassen?
 
H

httpdigest

Das funktioniert nur, wenn du die Variable, der du die Lambda zuweist, als statische Klassenvariable oder Instanzvariable definierst. Z.B. so:
Java:
public class Test {
  private final Potenz p = (int x, int y) -> y == 0 ? 1 : x * this.p.potenz(x, y - 1);
}
 
A

Adriano10

Das funktioniert nur, wenn du die Variable, der du die Lambda zuweist, als statische Klassenvariable oder Instanzvariable definierst. Z.B. so:
Java:
public class Test {
  private final Potenz p = (int x, int y) -> y == 0 ? 1 : x * this.p.potenz(x, y - 1);
}
Achso okay danke dir
 
MoxxiManagarm

MoxxiManagarm

Bitte schreibe nicht alles in einer Zeile :( Das verringert die Lesbarkeit
 
H

handshake45

Es geht auch ohne dieses nervige Interface...
Java:
	public static Function<Integer, Function<Integer, Function>> myTriFunction =
			x -> y -> f -> y == 0 ? 1 : x * (Integer) ((Function<Integer, Function<Integer, Function>>) f).apply(x).apply(y - 1).apply(f);
	public static BiFunction<Integer, Integer, Integer> myBiFunction =
			(x, y) -> (Integer) myTriFunction.apply(x).apply(y).apply(myTriFunction);
Java:
		System.out.println(myBiFunction.apply(3, 5));
243
 
H

handshake45

Das Konstrukt nennt sich übrigens Currying... hab nochmal nachgesehen.
 
H

httpdigest

Welches "Konstrukt"? Currying beschreibt die Transformation einer Funktion, die ein Argument als Tupel der Länge N bekommt, in eine Funktion, die N einzelne Parameter bekommt. Und Tupel gibt es in Java schonmal nicht.
Currying wird oft mit partieller Auswertung verwechselt, wahrscheinlich, weil die partielle Auswertung einer Funktion, die ein Tupel als Argument bekommt, erst via Currying möglich wird.
 
Thema: 

Lambda

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben