Lambda-Ausdrücke

Adriano10

Bekanntes Mitglied
Java:
public class FunktionTest {

    public interface Funktion<T> {

        T calculate(T x);

       
    }

    public static void main(String[] args) {

        // b
        Funktion<Integer> id = (Integer x) -> x;
        Integer a = id.calculate(10);
        System.out.println(a);

        Funktion<Double> inverse = (Double x) -> x * (-1);
        Double a1 = inverse.calculate(-5.3);
        System.out.println(a1);

        Funktion<Integer> timesTen = (Integer y) -> (y * 10);
        Integer a2 = timesTen.calculate(5);
        System.out.println(a2);

        Funktion<Double> divideByPi = (Double y) -> (y / 3.14);
        Double a3 = divideByPi.calculate(12.0);
        System.out.println(a3);

        // c

        Funktion<Double> round = (Double x) -> x;
        Double b = round.calculate(11.5);
        System.out.println(Math.round(b));

        // d

    }
}
Jetzt muss noch eine Hifsmethode "Function<Double, Double> makeChain(final Function<Double, Double>[] funs)" schreiben, die eine Function-Instanz zurückgibt, die eine Verkettung der als Parameter übergebenen functions ist.

Trozt vielen Versuchen schaffe ich leider nicht, diese Hilfsmethode interface anzupassen. Was soll ich jetzt machen?

Vielen Dank für jede Hilfe
 
Java:
public interface Funktion<T> {

        T calculate(T x);

      Function<Double, Double> makeChain(final Function<Double, Double>[] funs) ;
    }

ich habe generisches Interface Funktion<T> und jetzt wird in der Aufgabestellung verlangt, noch eine Hilfemethode
Function<Double, Double> makeChain(final Function<Double, Double>[] funs) zu schreiben, aber wenn ich so versuche, dann meckert Compiler .
 
Die Hilfsmethode `makeChain` soll sicherlich eine statische Methode sein, da sie sich nicht auf eine Instanz von `Funktion` bezieht, sondern die zu verkettenden Funktionen als Parameter bekommt. Du musst die Methode also als `static` markieren und auch implementieren. Entweder in dem Interface `Funktion` oder in irgendeiner anderen Klasse (keine Ahnung, ob der genaue Ort in der Aufgabenstellung festgelegt ist).
 
Die Hilfsmethode `makeChain` soll sicherlich eine statische Methode sein, da sie sich nicht auf eine Instanz von Funktion bezieht, sondern die zu verkettenden Funktionen als Parameter bekommt. Du musst die Methode also als `static` markieren und auch implementieren. Entweder in dem Interface `Funktion` oder in irgendeiner anderen Klasse (keine Ahnung, ob der genaue Ort in der Aufgabenstellung festgelegt ist).

Vielleich ist es möglich, das Interface an die Hilfsmethode anzupassen. aber wie? komm ich darauf leider nicht.
 
Du musst doch einfach nur die Methode implementieren und als `static` markieren. Es soll ja nicht jede Ableitung/Implementierung des Funktion-Interfaces nochmal die Methode `makeChain` implementieren müssen. Und auf eine Instanz von `Funktion` bezieht sich die Methode `makeChain` auch nicht -> also: static (und z.B. nicht als `default` Implementierung).
 
Du musst doch einfach nur die Methode implementieren und als `static` markieren. Es soll ja nicht jede Ableitung/Implementierung des Funktion-Interfaces nochmal die Methode `makeChain` implementieren müssen. Und auf eine Instanz von `Funktion` bezieht sich die Methode `makeChain` auch nicht -> also: static (und z.B. nicht als `default` Implementierung).
Java:
public class FunktionTest {

    public interface Funktion<T extends Number, K extends Number> {

        T calculate(K x);

    }

    public static Funktion<Double, Double> makeChain(final Funktion<Double, Double>[] funs) {

        return x -> {
            for (Funktion<Double, Double> f : funs) {
                x = f.calculate(x);
            }
            return x;
        };

    }

    public static void main(String[] args) {
        // b
        Funktion<Double, Double> id = (Double x) -> x;
        Double a = id.calculate(10.0);
        System.out.println(a);

        Funktion<Double, Double> inverse = (Double x) -> x * (-1);
        Double a1 = inverse.calculate(-5.3);
        System.out.println(a1);

        Funktion<Double, Double> timesTen = (Double y) -> (y * 10);
        Double a2 = timesTen.calculate(a1);
        System.out.println(a2);

        Funktion<Double, Double> divideByPi = (Double y) -> (y / 3.14);
        Double a3 = divideByPi.calculate(a2);
        System.out.println(a3);

        // c

        Funktion<Double, Double> round = (Double x) -> x;
        Double b = round.calculate(a3);
        System.out.println(Math.round(b));

        // d
        
        Funktion<Double, Double> chain = makeChain(new Funktion[] { inverse, id,
                timesTen,  divideByPi });
        
        Double g = chain.calculate(5.5);
        System.out.println(Math.round(g));

    }
}

Ich danke dir für den Hinweis. jetzt funktioniert fabelhaft....
 

Zurück
Oben