Fragen bezgl. Lambdas

tt357

Mitglied
Ich haette eine Frage zu folgendem Lambda:
Java:
import java.util.*;
public class GFG {

    public static void main(String[] args)
    {
        // create an ArrayList which going to
        // contains a list of Numbers
        ArrayList<Integer> Numbers = new ArrayList<Integer>();

        // Add Number to list
        Numbers.add(23);
        Numbers.add(32);
        Numbers.add(45);
        Numbers.add(63);

        // forEach method of ArrayList and
        // print numbers
        Numbers.forEach((n) -> System.out.println(n));
    }
}
Woher weiß er das sotieren soll? Ich meine wenn ich selbst Lambdas mit eigenen Interfaces erstelle kann ich es i.d.R noch nachvollziehen, aber hier ist es so das diesem Lambda das functional Interface public void forEach(Consumer<? super E> action) zugrunde liegt.
Wird das Lambda wie folgt ausgewertet:
(n -> System.out.println(n)) muss fuer den Compiler ja das Consumer<? super E> action> sein, bzw. das Interface in der forEach Schleife. Nur wie kommt er jetzt darauf alle Strings, Integers usw. zu sotieren? In der Doc findet sich zum Consumer Interface folgendes "This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference." Mir erschließt sich immer noch nicht wie der Compiler darauf kommt, zu sotieren. Weiß da jmd. weiter?

mfg
 

httpdigest

Top Contributor
Wie kommst du darauf, dass hier sortiert wird? Du fügst die Zahlen ja bereits in aufsteigend sortierter Reihenfolge in die Liste hinzu.
forEach auf der Liste (bzw. auf dem Iterable Interface) liefert die Element der Liste einfach nur in Einfüge-Reihenfolge, bzw. in der Reihenfolge, die die List definiert.
Das hat nichts mit Lambdas zu tun.
 

tt357

Mitglied
Ich kam darauf, weil das Consumer Interface zwei Methoden besitzt: andThen und accept. Dachte er ruft andThen auf.
Aber dann stellt sich mir immer noch die Frage, wie der Compiler das Lambda genau auswertet? (n) -> System.out.println(n)) wird an das Consumer Interface übergeben. Woher weiß der Compiler als erstes: Das er alle Werte durchgehen soll, sprich alle darin enthaltenen Zahlen und welche Funktion ruft er im Consumer Interface auf bzw. was geschieht damit eig. genau?
 

httpdigest

Top Contributor
Der Compiler weiß das nicht. Das steht in der Implementierung der Iterable.forEach() Methode:
Java:
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
bzw. der Überschreibung dieser Methode in ArrayList (ist hier aber irrelevant, du kannst dir genauso gut die Iterable-Implementierung angucken):
Java:
    @Override
    public void forEach(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        final int expectedModCount = modCount;
        final Object[] es = elementData;
        final int size = this.size;
        for (int i = 0; modCount == expectedModCount && i < size; i++)
            action.accept(elementAt(es, i));
        if (modCount != expectedModCount)
            throw new ConcurrentModificationException();
    }
 

tt357

Mitglied
Also wird (n) -> System.out.println(n) entsprechend der Anzahl der Elemente in der Liste aufgerufen? Oder werden alle ListenElmente gesammelt und dann wird Iterable.forEach aufgerufen?
 

httpdigest

Top Contributor
Also wird (n) -> System.out.println(n) entsprechend der Anzahl der Elemente in der Liste aufgerufen? Oder werden alle ListenElmente gesammelt und dann wird Iterable.forEach aufgerufen?
Die forEach Implementierung in ArrayList geht halt einfach alle Listenelemente durch und ruft für jedes dieser Listenelemente die accept() Methode des Consumers auf.
 

httpdigest

Top Contributor
Ist ja immerhin ein Lamba-Ausdruck.
Meine Aussage, dass das nichts mit Lambdas zu tun hat, bezog sich darauf, dass hier Zahlen sortiert ausgegeben werden. Das hat einzig allein etwas damit zu tun, dass die Zahlen bereits sortiert in die Liste eingefügt worden sind. Dass hier ein Lambda-Ausdruck zum Ausgeben der Zahlen verwendet wird, sortiert die Zahlen nicht. Das wollte ich damit sagen.
 

temi

Top Contributor
Meine Aussage, dass das nichts mit Lambdas zu tun hat, bezog sich darauf, dass hier Zahlen sortiert ausgegeben werden. Das hat einzig allein etwas damit zu tun, dass die Zahlen bereits sortiert in die Liste eingefügt worden sind.

*Ich* hab das auch so verstanden. Den Fragesteller könntest du damit evtl. verwirrt haben.
 
X

Xyz1

Gast
Ich sachs ja, etwas nachdenken kann nicht schaden. :p

Der Compiler weiß das nicht. Das steht in der Implementierung der Iterable.forEach() Methode:

bzw. der Überschreibung dieser Methode in ArrayList (ist hier aber irrelevant, du kannst dir genauso gut die Iterable-Implementierung angucken):

Man könnte noch das Cosumer-Interface heranziehen, aber das ist mehr oder weniger langweilig. Da passiert die Action nicht. Aber es könnte beim Verstehen der Lambdas helfen....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Fragen zu Testabdeckungs-Metriken Allgemeine Java-Themen 4
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
K BlueJ - Fragen zu dem Spiel Pacman (Nachprogrammieren) Allgemeine Java-Themen 141
V Ich hätte 2 Fragen Allgemeine Java-Themen 5
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
H Fragen zur Kraken Api Allgemeine Java-Themen 1
nonickatall Klassen Grundsätzliche Fragen zu geplanter Programmstruktur Allgemeine Java-Themen 5
W Ein paar Fragen zu .properties und .css Allgemeine Java-Themen 6
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
X Fragen zur Javamail API und Gmail Allgemeine Java-Themen 4
X Collections Fragen zu gleichen Elementen in TreeSet Allgemeine Java-Themen 35
A Neuerungen in Java 8 StreamAPI- Paar fragen Allgemeine Java-Themen 4
temi Fragen zur Software-Architektur Allgemeine Java-Themen 123
M Diverse Design-Fragen Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
D Grundsätzliche Fragen zum Heap Space Allgemeine Java-Themen 12
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
M Allgemeine Fragen meinerseits Allgemeine Java-Themen 4
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
R Es gibt keine dummen Fragen (hab ich mal gehört) Allgemeine Java-Themen 11
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
2 2 Klein Fragen Allgemeine Java-Themen 7
alderwaran .jar Code Signing, User-Keystore und Fragen dazu Allgemeine Java-Themen 0
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
A Java Theorie-Fragen Allgemeine Java-Themen 7
K Java QUIZ-Spiel Fragen und Antworten generieren?! Allgemeine Java-Themen 5
R Socket Fragen zu UDP Allgemeine Java-Themen 1
B Noob-Fragen zu Tablets und PC kompatiblität... Allgemeine Java-Themen 6
D Ein paar allgemeine Fragen zu Java Allgemeine Java-Themen 19
L Fragen für Facharbeit: Analyse von Strings in Java Allgemeine Java-Themen 4
R Fragen zu Server + UI Allgemeine Java-Themen 2
U Vier Fragen zu Java Allgemeine Java-Themen 2
H MediaManager Fragen/Probleme Allgemeine Java-Themen 6
D Fragen zum erstellen einer ausführbaren Jar Datei Allgemeine Java-Themen 3
C Polymorphie Fragen zur Annotations von Persistenz Allgemeine Java-Themen 2
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
Luk10 Fragen zum ByteBuffer (lwjgl - icons) Allgemeine Java-Themen 2
F Akkumulator Hough-Transformation offene Fragen Allgemeine Java-Themen 4
Luk10 Fragen zu Naming-Conventions Allgemeine Java-Themen 5
Z Einige Fragen Allgemeine Java-Themen 10
T OOP Einige Fragen zu UML-Klassendiagrammen Allgemeine Java-Themen 6
G Einige Fragen zu ResourceBundles Allgemeine Java-Themen 2
S Fragen zu verschiedenen Themen vom JCreator Allgemeine Java-Themen 2
DStrohma Grundsätzliche Fragen zum Aufbau eines komplexeren Programmes Allgemeine Java-Themen 8
Semox Grapheneditor - Allgemeine Fragen zum Logikdesign Allgemeine Java-Themen 3
O kleine Fragen eines Anfängers Allgemeine Java-Themen 2
X Executor fragen ob fertig Allgemeine Java-Themen 13
nrg Swing 2 Fragen zu Swing/AWT Allgemeine Java-Themen 7
K Reflections Fragen Allgemeine Java-Themen 7
S Fragen zum SCJD-Zertifikat Allgemeine Java-Themen 2
M Backend Entwicklung - Konzept fragen Allgemeine Java-Themen 3
E Fragen zu Scala Allgemeine Java-Themen 11
Daniel_L Fragen zu RegEx und URL umwandeln Allgemeine Java-Themen 4
J Diverse Fragen bezüglich Jasper Allgemeine Java-Themen 3
S Fragen zum ShutdownHook Allgemeine Java-Themen 7
V Fragen zu einem Java Browser Allgemeine Java-Themen 7
G Fragen zum eigenen Scheduler Allgemeine Java-Themen 4
M Drag and Drop: 3 Fragen Allgemeine Java-Themen 3
L Einige Fragen zu Java Allgemeine Java-Themen 9
F Linguistische Fragen zu Javadoc bzw. Englisch Allgemeine Java-Themen 4
E Einfache Fragen zu Dateien Allgemeine Java-Themen 7
E Thread Fragen in Verbindung mit Swing Allgemeine Java-Themen 4
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
X Einige Fragen zu Serialisierung Allgemeine Java-Themen 2
H Java Multiplicoice Test (10 Fragen) Allgemeine Java-Themen 11
J Viele Fragen. =) Hoffentlich könnt ihr helfen Allgemeine Java-Themen 9
D Grundsätzliche Fragen zur Grafikdarstellung in Spielen Allgemeine Java-Themen 2
J 2 Fragen zu JMF und eine Rechtsfrage Allgemeine Java-Themen 3
S Viele Fragen eines Umsteigers (von .NET) Allgemeine Java-Themen 6
C LinkedList Fragen Allgemeine Java-Themen 7
P Fragen zur JBuilder und den kosten. Allgemeine Java-Themen 7
reibi JVM fragen welche Apps geladen sind Allgemeine Java-Themen 7
I Fragen zum Internetseiten Einlesen/Auswerten Allgemeine Java-Themen 5
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
S 2 Fragen allgemeine fragen zu final und interface Allgemeine Java-Themen 13
M ein paar fragen über JBoss und Catalina Allgemeine Java-Themen 7
D Allgemeine Fragen zum Speichern Allgemeine Java-Themen 3
F allgemeine Fragen zu Java Allgemeine Java-Themen 9
S Fragen zu 4 speziellen Listen Allgemeine Java-Themen 4
U JFrame, JOptionPane - vor dem Schließen Benutzer fragen Allgemeine Java-Themen 10
I zwei simple fragen Allgemeine Java-Themen 22
G 2 Fragen Allgemeine Java-Themen 7
G Fragen zu ausführbaren JAR Files Allgemeine Java-Themen 23
G Fragen zu JTextField bzw. JTextArea Allgemeine Java-Themen 2
J 5 Fragen. Allgemeine Java-Themen 2
P Tausend Fragen... Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben