Commit 41666ff9 by Patryk Czarnik

"mój framework funkcyjny"

parent 0414eb54
package emps.v4_rekordy;
import p13_lambdy.FunkcjaLiczbowa;
// klasa narzędziowa, w której zaimlementujemy ogólny schemat / algorytm działania,
// z którego będzie się korzystać za pomocą wyrażeń lambda
// (Udajemy, że twozymy bibliotekę podobną do Stream / operacji na listach
public class MojFrameworkFunkcyjny {
/** Do każdego elementu tablicy t aplikuje funkcję f i podmienia element tablicy na wynik tej funkcji.
* Analogia do operacji map na strumieniach lub replaceAll dla list.
*/
public static void zastosuj(FunkcjaLiczbowa f, double[] t) {
for(int i = 0; i < t.length; i++) {
t[i] = f.oblicz(t[i]);
}
}
}
package emps.v4_rekordy;
import java.util.Arrays;
public class MojFrameworkZastosowanie {
public static void main(String[] args) {
// Tutaj zobaczymy takie użycie wyrażeń lambda i referencji do metod, jak w normalnym programowaniu.
// Jest to możliwe dzięki temu, że zdefiniowaliśmy pewien ogólny schemat w ramach "frameworku".
double[] a = {0.0, 0.5, 1.0, 2.0, 5.9, 13.3, 60.0};
System.out.println(Arrays.toString(a));
MojFrameworkFunkcyjny.zastosuj(x -> x*x, a);
System.out.println(Arrays.toString(a));
MojFrameworkFunkcyjny.zastosuj(Math::sqrt, a);
System.out.println(Arrays.toString(a));
MojFrameworkFunkcyjny.zastosuj(x -> x+4, a);
System.out.println(Arrays.toString(a));
MojFrameworkFunkcyjny.zastosuj(Math::sqrt, a);
System.out.println(Arrays.toString(a));
}
}
......@@ -38,11 +38,15 @@ public class Lambdy {
// Jeśli istnieje metoda, której nagłówek pasuje do naszego interfejsu, to zamiast używać lambdy:
FunkcjaLiczbowa p1 = x -> Math.sqrt(x);
System.out.println(p1);
// Aby kompilator zrozumiał, o co chodzi w wyrażeniu lambda, musi wiedzieć, do jakiego interfejsu ma to pasować.
// Tutaj brakuje kontekstu i taka labda jest niepoprawna:
// System.out.println(x -> x*100);
// można bezpośrednio wskazać tę metodę ("method reference")
FunkcjaLiczbowa p2 = Math::sqrt;
System.out.println(p1);
System.out.println(p2);
System.out.println(p1.oblicz(100));
System.out.println(p2.oblicz(256));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment