Lambda Expressions

njans

Top Contributor
Eine Lambda expression ist ein Ausdruck der Form : (parameter) -> {behaviour}
Die sind Teil von Java 8 und werden dort für functional Interfaces und einige andere nette Dinge verwendet.
 

DrZoidberg

Top Contributor
Sieh dir mal dieses Beispiel an
Java:
Random rand = new Random();
IntStream nums = rand.ints(10, 0, 100);
nums.filter(x -> x%2 == 0).map(x -> x*2).forEach(System.out::println);

Hier wird erstmal ein Stream erzeugt und mit 10 Zufallszahlen zwischen 0 und 100 gefüllt.
Ein Stream ist so ählich wie eine Liste, kann allerdings unendlich lang sein und besitzt Methoden für funktionale Programmierung.
Die Zahlen werden dann gefiltert, so dass nur noch gerade Zahlen im Stream vorhanden sind. Danach werden dann alle verbliebenen Zahlen per map verdoppelt und zum Schluss ausgegeben.
Mit :: gibt man eine Methodenreferenz an. Man kann sagen :: wandelt eine Methode in ein Objekt um, das dann einer anderen Methode übergeben werden kann.

x -> x%2 == 0 und
x -> x*2
sind Lambda Ausdrücke.

Das Ganze ist im Grunde nur eine Kurzschreibweise für diesen Code
Java:
nums.filter(
    new IntPredicate() {
        public boolean test(int x) {
            return x%2 == 0;
        }
    }).map(
    new IntUnaryOperator() {
        public int applyAsInt(int x) {
            return x*2;
        }
    }).forEach(
    new IntConsumer() {
        public void accept(int x) {
            System.out.println(x);
        }
    });

IntPredicate, IntUnaryOperator und IntConsumer sind alles funktionale Interfaces, das heisst sie unterstützen eine automatische Umwandlung von Lamda Ausdrücken und Methoden Referenzen in Objekte dieses Typs.

Auch sehr interessant ist die automatische Parallelisierung von Stream Operationen.
z.B.
Java:
public class Test {
    private static int fib(int n) {
        if(n < 2) return n;
        else return fib(n-1) + fib(n-2);
    }

    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(38,39,40,41,42,43,44,45);

        long start = System.nanoTime();
        list.stream().parallel().map(Test::fib).forEach(System.out::println);
        long end = System.nanoTime();
        double time = (end-start)/1e9;
        System.out.println("time = " + time);
    }
}

Da die fibonacci Methode in diesem Beispiel sehr ineffizient geschrieben ist, läuft der Code langsam, aber durch Aufrufen der parallel Methode wird die Berechnung automatisch auf alle CPU Kerne verteilt.
 

Flown

Administrator
Mitarbeiter
Eine Kleinigkeit zum anmerken:

list.stream().parallel().map(Test::fib).forEach(System.out::println);

Den parallelen Stream kann man einfacher haben. Garantiert ist die Reihenfolge nur, wenn man forEachOrdered aufruft.

Java:
list.parallelStream().map(Test::fib).forEachOrdered(System.out::println);
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
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
G Java Lambda Ausdrücke Java Basics - Anfänger-Themen 19
M Java 8 Lambda Expression Java Basics - Anfänger-Themen 1
A Lambda Java Basics - Anfänger-Themen 9
A Lambda-Ausdrücke Java Basics - Anfänger-Themen 6
B Summe von Property innerhalb einer Liste via Lambda Java Basics - Anfänger-Themen 1
G Lambda Ausdrücke Java Basics - Anfänger-Themen 2
O Lambda Ausdruck mit Wildcard einschränken Java Basics - Anfänger-Themen 5
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
B Interface Java Lambda Ausdruck. Java Basics - Anfänger-Themen 11
S Lambda Ausdrücke Streams Java Basics - Anfänger-Themen 6
M Lambda - Ausdruck zu Beschreibung erstellen Java Basics - Anfänger-Themen 7
M Lambda - Ausdrücke verstehen Java Basics - Anfänger-Themen 2
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
N Lambda Ausdrücke richtig schreiben Java Basics - Anfänger-Themen 4
F Methoden Lambda Ausdrücke Methodensignatur Java Basics - Anfänger-Themen 6
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
C Lambda Ausdrücke Java Basics - Anfänger-Themen 1
TheSorm Java 8 Lambda-Ausdrücke Java Basics - Anfänger-Themen 9
M Unverständnis Lamda Expressions Java Basics - Anfänger-Themen 3
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
J Rekursives Parsen (ohne Reg Expressions) Java Basics - Anfänger-Themen 8
Burny91 Compiler-Fehler Regular Expressions matchen nicht korrekt Java Basics - Anfänger-Themen 5
R regular expressions Java Basics - Anfänger-Themen 3
eykarhorn Escapen in Regular Expressions Java Basics - Anfänger-Themen 7
G Regular expressions Java Basics - Anfänger-Themen 6
G Regular expressions Java Basics - Anfänger-Themen 3
D Regular Expressions Java Basics - Anfänger-Themen 2
G Regular Expressions Java Basics - Anfänger-Themen 3
P Regular expressions: Liste? Java Basics - Anfänger-Themen 7
J Regular Expressions Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben