it-swarm.com.de

Ist Collection.stream (). Filter (). ForEach () im Vergleich zu einem Standard für jede Schleife ineffizient?

IntelliJ IDEA hat mir gerade empfohlen, die folgende for-each-Schleife durch einen Java 8 "forEach" -Aufruf zu ersetzen:

    for (Object o : objects) {
        if (o instanceof SomeObject) {
            doSomething();
        }
    }

Der empfohlene Anruf würde folgendermaßen aussehen:

objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething());

Sofern ich nicht falsch verstehe, wie die zugrunde liegende Funktionalität von Stream funktioniert, scheint mir die Verwendung von Stream eine O(2n) - Operation zu sein, im Gegensatz zu einer O(n) - Operation für den Standard für jede Schleife.

15
Mirrana

Java-Streams durchlaufen Ihre Sammlung trotz der Syntax nicht einmal für jede Anweisung. Es wendet die gesamte Kette auf jedes Element an, jeweils ein Element.

In Ihrem Fall würde der Stream genau wie die Schleife funktionieren. Nehmen Sie ein Element, vergleichen Sie es mit Ihrem Prädikat, wenden Sie Ihre Operation an und fahren Sie mit dem nächsten Element fort.

22
Rosa Richter