Lambda filter performance

eldrior

Aktives Mitglied
Hallo,

Wenn ich mit einem Lambdaasudruck eine Liste filtern möchte, welche Variante ist dann schneller?

Java:
        List<Integer> l = new ArrayList();

        //Variante 1:
        l = l.stream().filter(x -> x > 20).filter(x -> x < 100).collect(Collectors.toList());
        //Variante 2:
        l = l.stream().filter(x -> x > 20 && x < 100).collect(Collectors.toList());

Nur nach meinem persönlichen Gefühl würde ich zu Variante 1 tendieren. Ich hätte da gedacht, dass es sich ein bisschen wie beim StringBuilder verhält, bei dem Variante A auch schneller, als Variante B ist:

Java:
        StringBuilder sb = new StringBuilder();

        //Variante A:
        sb.append("Hallo ").append("Welt!");
        //Variante B:
        sb.append("Hallo " + "Welt!");

Ich habe jetzt ein stark vereinfachtes Beispiel gewählt, natürlich könnte ich auch bspw. Personen nach Vor- und Nachname sowie Kleidergröße und IQ gleichzeitig filtern wollen...

Weiß da jemand etwas genaueres?
 

Joose

Top Contributor
Ich würde mir einfach entsprechend große Listen generieren lassen und es einfach testen.

Ich würde auf Variante 2 tippen.
Grund: Methodenaufrufe sind teuer (man spart sich hier schon mal einen), außerdem wird die Liste nur 1x durchlaufen und gleich beide Sachen geprüft (bzw. die eine auch nur dann wenn die andere wahr ist)
 

eldrior

Aktives Mitglied
Du hast natürlich recht, das hätte ich zuerst ausprobieren sollen, aber für alle, die das interessiert mein Ergebnis mit folgendem Code:

Java:
        List<Integer> l = new ArrayList();
        List<Integer> m = new ArrayList();
        Random rand = new Random();

        for (int i = 0; i < 5000000; i++)
        {
            l.add(rand.nextInt(500));
            m.add(rand.nextInt(500));
        }
        System.out.println("Start");

        long s1 = System.currentTimeMillis();
        l = l.stream().filter(x -> x > 20).filter(x -> x < 100).collect(Collectors.toList());
        long s2 = System.currentTimeMillis();

        System.out.println(s2 - s1);

        s1 = System.currentTimeMillis();
        m = m.stream().filter(x -> x > 20 && x < 100).collect(Collectors.toList());
        s2 = System.currentTimeMillis();

        System.out.println(s2 - s1);

So wie er da steht ist Variante 1 immer schneller.
Ändert man den Code bei beiden Versionen so ab:
Java:
X.stream().parallel()...
dann ist Versioin 2 durchgehend deutlich schneller. Ich werde wenn ich zu Hause bin mal eine größere Testreihe starten :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Neumi5694 Lambda - Block vs "Anweisungsliste" Allgemeine Java-Themen 8
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
A Lambda-Ausdrücke Allgemeine Java-Themen 5
A Lambda und Streams verstehen Allgemeine Java-Themen 4
O Best Practice Lambda Expressions Allgemeine Java-Themen 3
Rudolf Compiler-Fehler Lambda als Argument kompiliert nicht Allgemeine Java-Themen 2
H Collector Generics Problem (incl. Stream & Lambda) Allgemeine Java-Themen 4
M Lambda "invalid method reference no suitable method found" Allgemeine Java-Themen 2
H Consumer (Java8 Lambda) an Timer übergeben Allgemeine Java-Themen 2
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
Buroto Best Practice Such Filter Maschine Allgemeine Java-Themen 8
S Nachrichten Filter Programm Allgemeine Java-Themen 14
W JSP / Tomcat / Filter / Preprocessing Allgemeine Java-Themen 7
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
L Gauß Filter Allgemeine Java-Themen 2
V Regex Bereichs Filter Allgemeine Java-Themen 4
E JAVA URL abfangen und weiterleiten? Filter? Allgemeine Java-Themen 6
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
G log4j package filter Allgemeine Java-Themen 10
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
T JXL => Filter Allgemeine Java-Themen 2
T Sortierter assoziativer Speicher mit Filter Allgemeine Java-Themen 4
J Filter für String (HTML) Allgemeine Java-Themen 2
C File-Filter in JFileChooser Allgemeine Java-Themen 4
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
H Watson-Crick-Complement Performance Allgemeine Java-Themen 18
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
B Performance Messungen Allgemeine Java-Themen 4
J Threads verbessern die Performance NICHT ? Allgemeine Java-Themen 8
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
I Performance - JDBC UPC PoolDataSoure Allgemeine Java-Themen 0
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
A Jasper Report Performance bei PDF erzeugen Allgemeine Java-Themen 0
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
R DBUnit Performance Probleme Allgemeine Java-Themen 0
P Performance: super explizit erwähnen oder weglassen? Allgemeine Java-Themen 5
S starke performance probleme des forums Allgemeine Java-Themen 10
C Performance Tips Allgemeine Java-Themen 13
A Performance/Speicherplatz-Nutzung bei Tests Allgemeine Java-Themen 6
R Java Performance testen Allgemeine Java-Themen 18
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
V Performance steigern Allgemeine Java-Themen 7
D Reflection-Performance Allgemeine Java-Themen 7
M Einfluss von Caching auf die Performance (große Arrays) Allgemeine Java-Themen 24
R Collections Performance einer HashMap Allgemeine Java-Themen 26
i<3java [Groovy/Grails](oder auch java) Mögliche Performance Probleme bei Mailversendung Allgemeine Java-Themen 2
D Performance Objektallokation Allgemeine Java-Themen 28
J Java Performance nicht nachvollziehbar Allgemeine Java-Themen 3
I Library für High Performance Mime Type Erkennung Allgemeine Java-Themen 8
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
M Runtime.exec() - Performance / Frage zu Threads Allgemeine Java-Themen 5
M Performance Allgemeine Java-Themen 6
M Performance Allgemeine Java-Themen 5
E Performance website download Allgemeine Java-Themen 13
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
hdi Was frisst in meinem Programm den Speicher / verschlechtert die Performance Allgemeine Java-Themen 11
J Performance von Java GUI-Anwendungen Allgemeine Java-Themen 2
U Java Performance im Vergleich zu C++ in speziellem Anwendungsfall Allgemeine Java-Themen 6
S Performance und Function Call Depth Allgemeine Java-Themen 6
H Performance Vorteil durch Wechsel der JVM? Allgemeine Java-Themen 6
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
T Performance ArrayList#remove Allgemeine Java-Themen 8
ARadauer Performance Pptimierung -Lesen/Schreiben Allgemeine Java-Themen 10
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
M Listener und Performance Allgemeine Java-Themen 9
P Performance: Ziehen ohne Zurücklegen (große Datenmenge) Allgemeine Java-Themen 10
D Performance: ArrayList vs. Array vs. "Eigene Liste&quot Allgemeine Java-Themen 8
M nichtreferenzierte Objekte auf NULL setzen -> Performance Allgemeine Java-Themen 4
S Ursache für schlechte Performance Allgemeine Java-Themen 2
L Java Performance Check Tool Allgemeine Java-Themen 3
S Performance von Comparator Allgemeine Java-Themen 3
egrath Performance Problem mit File-I/O Allgemeine Java-Themen 6
S Performance Problem Allgemeine Java-Themen 11
X Java Performance auf Sun Systemen bzw. generell Allgemeine Java-Themen 4
T Performance String-Operationen und StringBuffer (1.4und 1.5) Allgemeine Java-Themen 18
P miese performance bei nem BufferedImage + repaint :( Allgemeine Java-Themen 6
T Performance-Grundlagen Allgemeine Java-Themen 4
G Performance Problem bei der Übertragung Server zum Client Allgemeine Java-Themen 3
V Performance Leck finden Allgemeine Java-Themen 3
T Tile Game Performance Allgemeine Java-Themen 32
M Performance enorm langsam Allgemeine Java-Themen 26
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
M Performance: Java zu C/C++ bei Datenbankanwendung Allgemeine Java-Themen 3
Y unnecessary cast & Performance Allgemeine Java-Themen 29
conan2 Performance von paint() Allgemeine Java-Themen 2
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
F Bilder als "Thumbnails" laden - Performance Allgemeine Java-Themen 6
S Java3D Performance optimieren Allgemeine Java-Themen 5
F Wenn ihr Performance wollt nehmt C++ Allgemeine Java-Themen 39
N Performance-Test (Geschwindigkeit von Methoden vergleichen)? Allgemeine Java-Themen 4
S Performance Test mit JMeter Allgemeine Java-Themen 2
T Performance Allgemeine Java-Themen 8
J Anfängerliste für gute Performance? Allgemeine Java-Themen 3
Luma Performance-Problem mit RandomAcces File Allgemeine Java-Themen 4
I Performance bei "String <-> Byte"-Umwandlung Allgemeine Java-Themen 4
I Performance-Probleme bei Schleife Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben