@FunctionalInterface interface Funktion { int fkt(int a, int b); } @FunctionalInterface interface Doit { void doit(); } public class LambdaAusdruecke { public static void main(String[] args) { class Plus implements Funktion { @Override public int fkt(int a, int b) { return a + b; } } class Potenz implements Funktion { @Override public int fkt(int c, int b) { if (b <= 0) return 1; return c* fkt(c, b-1); } } Funktion h = new Potenz(); perform(new Plus(), 10); perform(h, 10); Funktion t = new Funktion() { public int fkt(int a, int b) { return a + b; } }; perform(t, 10); perform(new Funktion() { public int fkt(int a, int b) { return a + b; } } , 10); perform(new Funktion() { public int fkt(int a, int b) { if (b <= 0) return 1; return a * fkt(a, b-1); } } , 10); Funktion k = (int a, int b) -> { return a + b; }; k.fkt(5, 4); perform(k, 10); Funktion p = (c, b) -> c + b; perform(p, 10); perform((c, b) -> c + b, 10); perform(() -> System.out.println("Hi")); class MyRunnable implements Runnable { @Override public void run() { System.out.println("Thread läuft"); } } Runnable r = new MyRunnable(); Thread m = new Thread(r); m.start(); Runnable r2 = new Runnable(){ @Override public void run() { System.out.println("Thread läuft"); } }; Thread m2 = new Thread(r2); m2.start(); Thread m3 = new Thread( new Runnable() { @Override public void run() { System.out.println("Thread läuft"); } } ); m3.start(); Thread m4 = new Thread(() -> System.out.println("Thread läuft")); m4.start(); } public static void perform(Funktion f, int n) { for (int i = 1; i < n; i++) { System.out.println(f.fkt(i, i)); } } public static void perform(Doit d) { d.doit(); } }